'T'、'f'、'E'、'e'、'→' 在 dart/flutter 文档中代表什么?

2024-03-13

我正在学习颤振,但我不明白这些字母的含义。

map<T>(T f(E e)) → Iterable<T>
Returns a new lazy Iterable with elements that are created by 
calling f on each element of this Iterable in iteration order. [...]

那么,它们代表什么? 电话: F: 乙: 电子: →:


Iterable.map<T> https://api.dartlang.org/stable/2.1.0/dart-core/Iterable/map.html:

map<T>(T f(E e)) → Iterable<T>

返回一个新的惰性 Iterable,其中包含通过调用创建的元素 f 按迭代顺序在此 Iterable 的每个元素上。 [...]

  • T是一种语言Type在这种情况下,可迭代项的类型也是该函数的类型f必须返回。
  • 告诉你return type整个函数(map)在这种情况下Iterable of T
  • f是应用到的函数Element e作为参数传递给函数,以便函数可以对当前值执行一些操作,然后返回类型的新值T基于元素的值e.

如果你导航 Iterablemap函数定义 https://api.dartlang.org/stable/2.1.0/dart-core/Iterable/map.html你会看到:

Iterable<T> map <T>(
    T f(
      E e
    )
)

所以我想从确切的开始来提高我的答案map<T>OP 的功能,然后切换到更复杂的示例。

为了澄清所有这些,让我们看一个 Iterable 类的具体类,Set https://api.dartlang.org/stable/2.1.0/dart-core/Set-class.html班级选择一个Set类型的String在这种情况下:

Set<String> mySet = Set();
for (int i=0; i++<5;) {
  mySet.add(i.toString());
}
var myNewSet = mySet.map((currentValue) => (return "new" + currentValue));
for (var newValue in myNewSet) {
  debugPrint(newValue);
}

这里我有一个字符串集 Set<String>我想要另一个字符串集 Set<String>以便该值与原始地图的值相同,但带有前缀"new:"。为此我们可以轻松地使用map<T>连同它想要作为参数的闭包。

作为闭包传递的函数是

(currentValue) => ("new:" + currentValue)

如果我们愿意,我们也可以这样写:

(currentValue) {
  return "new:" + currentValue;
}

甚至传递这样的函数:

String modifySetElement(String currentValue) {
  return "new:" + currentValue;
}
  • var myNewSet = mySet.map((value) => ("new:" + value));
  • var myNewSet = mySet.map((value) {return "new:" + value;});
  • var myNewSet = mySet.map((value) => modifySetElement("new:" + value));

这意味着函数(闭包)的参数是String value of the element E of the Set我们正在修改。 我们甚至不必指定类型,因为它是通过方法定义推断的,这是泛型的强大功能之一。

函数(闭包)将一次应用于 Set 的所有元素,但您将其编写为闭包一次。

所以总结一下:

  • T是字符串
  • E是我们在函数内部处理的元素
  • f是我们的结束

让我们通过一个更复杂的示例来更深入地了解一下。我们现在要处理的是Dart Map https://api.dartlang.org/stable/2.1.0/dart-core/Map-class.html class.

Its map https://api.dartlang.org/stable/2.1.0/dart-core/Map/map.html函数的定义如下:

map<K2, V2>(MapEntry<K2, V2> f(K key, V value)) → Map<K2, V2>

所以在这种情况下,前面的第一和第三T is (K2, V2)以及函数的返回类型f(闭包),作为元素E参数对K and V(这是当前的键和值MapEntry迭代的元素),是一种类型MapEntry<K2, V2>是前一秒T.

然后整个函数返回一个新的Map<K2, V2>

下面是一个实际的例子Map:

Map<int, String> myMap = Map();
for (int i=0; i++<5;) {
  myMap[i] = i.toString();
}
var myNewMap = myMap.map((key, value) => (MapEntry(key, "new:" + value)));
for (var mapNewEntry in myNewMap.entries) {
  debugPrint(mapNewEntry.value);
}

在这个例子中我有一个Map<int, String>我想要另一个Map<int, String>所以(像以前一样)该值与原始地图的值相同,但带有前缀"new:".

同样,您可以编写闭包(您的f函数)也是这样(也许它更好地强调了一个事实,即它是一个基于当前地图条目值创建全新地图条目的函数)。

var myNewMap = myMap.map((key, value) {
    String newString = "new:" + value;
    return MapEntry(key, newString);
});

所有这些符号被称为Generics https://www.dartlang.org/guides/language/language-tour#generics因为它们是通用占位符,根据您使用它们的上下文对应于一种类型或另一种类型。

这是上面链接的摘录:

使用通用方法

最初,Dart 的通用支持仅限于类。一种称为泛型方法的新语法允许 方法和函数的类型参数:

T first<T>(List<T> ts) {
  // Do some initial work or error checking, then...
  T tmp = ts[0];
  // Do some additional checking or processing...
  return tmp;
}

这里,first() 上的泛型类型参数允许您使用 在几个地方输入参数 T:

在函数的返回类型中(T)。在参数类型中 (List<T>)。在局部变量的类型中(T tmp).

按照这个link https://www.dartlang.org/guides/language/effective-dart/design#do-follow-existing-mnemonic-conventions-when-naming-type-parameters对于泛型名称约定。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

'T'、'f'、'E'、'e'、'→' 在 dart/flutter 文档中代表什么? 的相关文章

随机推荐

  • myBatis 中 ArrayList 的类型处理程序

    我正在尝试为 ArrayList 编写类型处理程序 但这给了我错误任何人都可以帮助我 我想将 ArrayList 作为 VARCHAR 存储在数据库中并将其作为 ArrayList 检索 package com someweb typeha
  • 如何在容器中存储不同类型的模板化对象?

    假设我有一个vector or list或任何可能更适合这里的容器 我想将模板化类型的多个对象 或指针 存储在 std vector
  • SCNMaterialProperty不是渲染层

    当分配 AVPlayerLayer 时 SCNMaterialProperty 的内容属性在 SCNMaterial 上无法呈现 请注意 这只是物理设备上的问题 在模拟器 Xcode 6 0 1 上运行良好 我正在这样创建我的 SCNode
  • 在谷歌地图上显示多条路线

    我试图在同一张地图上显示多条路线 但无法这样做 无论我做什么 我都只能得到一条路线 function calcRoute var start document getElementById start value var end docum
  • 从字典中获取特定值

    如何从Python中的字典中获取特定的键 我有一本字典 dict redorange 1 blackhawak 2 garlicbread 3 我想获取其键名称中包含大蒜的键的值 我怎样才能实现它 让我们调用你的字典d print v fo
  • 将 nodemon 与 docker 和 docker-compose 结合使用

    我将 nodemon 与 docker compose 一起使用 这是我的 Dockerfile FROM node 10 WORKDIR usr src app COPY package json RUN npm install COPY
  • 如何从 Apache .htaccess 创建虚拟主机?

    我在用Apache 之友 XAMPP http www apachefriends org en xampp html在 Windows 本地服务器 中 我将虚拟主机设置为httpd vhosts conf在 Apache 配置目录中 如下
  • Android - 在 AsyncTask onPostExecute() 中设置的共享首选项并不总是设置?

    我有一些代码在 98 的时间内有效 在我自己的测试中则为 100 因此除了让用户设备遇到此问题之外 我无法真正重现该问题 我在 onPostExecute 中所做的是设置如下参数 SharedPreferences prefs Prefer
  • 带有方角的 UISegmentedControl

    我想用子类修改 UISegmentedControl 以删除圆角 我似乎无法设置cornerRadius 使 SegmentedControl 比屏幕更宽 因此 切掉 角落 不是一个选择 因为我有 4 或 5 个段 然后它们的大小会有所不同
  • 如何使用 python 连接多个 .wav 文件 [重复]

    这个问题在这里已经有答案了 我看到一篇文章将两个 wav 文件连接在一起 但我想知道如何使用 python 连接多个 wav 文件 我正在使用 python 3 6 0 如果有人有办法做到这一点 请教我 我看到另一篇文章要求加入 2 个 w
  • 更改背景后手指绘画速度变慢

    在我的 Paint 应用程序中 我使用了自定义视图 该视图位于 Finger Paint API 演示中 代码如下 public class MyView extends View private static final float MI
  • NSDateFormatter 中的上午/下午问题

    我编写下面的代码将一种日期格式转换为另一种日期格式 但 AM 字符串有效 PM 无效 请帮忙 dateTime 2013 01 24 18 30 PM dateTime 2013 01 24 06 30 AM NSDateFormatter
  • 在活动组中添加新活动时出现 java.lang.StackOverflowError

    我正进入 状态stackoverflow error 我的布局结构如下
  • 如何使用C断言让代码更安全?

    阅读杂项 与SDL开发相关的教程我发现了两个不同的例子 做同样的事情 但以不同的方式 我想知道从代码 安全性 和可维护性的角度来看 您认为这两者中哪一个是正确的 在第一个示例中 程序员根本没有使用断言 但代码看起来不错 至少在我看来 int
  • 零 SQL 死锁设计 - 有编码模式吗?

    我在 MS SQL Server 2005 之上运行的 NET 2 0 Web 应用程序上遇到了非常罕见但烦人的 SQL 死锁 过去 我们一直以非常经验的方式处理 SQL 死锁 基本上是调整查询直到它起作用 然而 我发现这种方法非常不令人满
  • .net 中的固定块

    我对何时需要固定块有点困惑 我有一个例子 它给了我一个矛盾的场景 如下 enum RoomType Economy Buisness Executive Deluxe struct HotelRoom public int Number p
  • maven生成pom文件

    我使用maven 3 0 3并尝试为第三方jar生成pom 如下所示 mvn install 安装文件 Dfile cobra jar DgroupId com cobra DartifactId cobra Dversion 0 98 4
  • 动态更改函数的返回类型

    我正在编写一个具有返回类型的函数 该函数将根据我们传递的列动态更改 在下面的代码中 我传递列值 列数据类型 但我在运行代码时遇到错误 带有返回值的 RETURN 语句不能在此使用 语境 如果这是不可能的 那么如何动态更改返回类型 请提出解决
  • 如何估计在 z3 for SMT 中解决 SAT 部分所花费的时间?

    我已经使用探查器 gprof statshere http www ccs neu edu jaideep example2 stats包括调用图 并试图将所花费的时间分为两类 I SAT 求解部分 包括 纯 布尔传播和 纯 布尔冲突子句检
  • 'T'、'f'、'E'、'e'、'→' 在 dart/flutter 文档中代表什么?

    我正在学习颤振 但我不明白这些字母的含义 map