您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

Dart / flutter文档中的“ T”,“ f”,“ E”,“ e”,“→”代表什么?

Dart / flutter文档中的“ T”,“ f”,“ E”,“ e”,“→”代表什么?

Iterable.map<T>

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

返回具有元素的新的惰性Iterable,该元素是通过按迭代顺序在此Iterable的每个元素上调用f创建的。[…]

如果浏览Iterable map函数定义,您将看到:

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

因此,我想从map<T>OP 的确切功能入手,然后再举一个更复杂的示例,以简化答案。

为了澄清所有这些,让我们来看一看Iterable类的具体类,在这种情况下Set类选择一个Settype 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);
}

在这里我有一个 String集合, Set<String>我想要另一个 String集合, Set<String>以便。为此,我们可以轻松地将其map<T>与所需的闭包一起用作参数。

作为闭包传递的函数

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

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

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

甚至传递这样的函数

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

这意味着该功能包(closure)的参数是String 的的 E中的Set,我们正在修改。我们甚至不必指定类型,因为它是由方法定义推断的,这是泛型的功能之一。

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

在此处输入图片说明

总结一下:

让我们更深入地讲一个例子。现在,我们将处理Dart Map类。

map功能定义如下:

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

因此,在这种情况下,先前的第一和第三TIS (K2, V2)和返回类型的功能f关闭),即取为元件E参数的一对KV(属于当前的键和值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>以便(与之前一样)。

在此处输入图片说明

同样,您也可以用f这种方式编写闭包(您的函数)(也许可以更好地强调这样一个事实,即根据当前地图条目值创建全新的MapEntry是一种幻想)。

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

所有这些符号都称为 通用 符号,因为它们是通用占位符,它们根据您使用它们的上下文对应于一种或另一种类型。

那是上面链接的摘录:

最初,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)的类型中。

其他 2022/1/1 18:20:28 有635人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶