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

Dartflutter文档中的“ T”,“ f”,“ E”,“ e”,“→”代表什么?,第1张

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

Iterable.map<T>

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

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

  • T``Type
    在这种情况下是一种语言,它是可迭代项的类型,也是函数
    f
    必须返回的类型。
  • 告诉您
    return type
    整个函数的,
    map
    在这种情况下
    Iterable
    T
  • f
    是应用于函数的函数
    Element e
    ,作为参数传递给函数,以便函数可以对当前值进行一些 *** 作,然后
    T
    根据元素的值返回一个新的type 值
    e

如果浏览Iterable

map
函数定义,您将看到:

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

因此,我想从

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

为了澄清所有这些,让我们来看一看Iterable类的具体类,在这种情况下Set类选择一个

Set
type
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>
以便
该值与原始地图的值相同,但以前缀环绕
"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));

这意味着该功能包(closure)的参数是

String
的的 元素
E
中的
Set
,我们正在修改。我们甚至不必指定类型,因为它是由方法定义推断的,这是泛型的功能之一。

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

总结一下:

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

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

map
功能定义如下:

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

因此,在这种情况下,先前的第一和第三

T
IS
(K2, V2)
和返回类型的功能
f
(关闭),即取为元件
E
参数的一对
K
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
这种方式编写闭包(您的函数)(也许可以更好地强调这样一个事实,即根据当前地图条目值创建全新的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
)的类型中。

单击此 链接以获取泛型名称约定。



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/4921824.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-12
下一篇 2022-11-12

发表评论

登录后才能评论

评论列表(0条)

保存