- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我正在学习 flutter,但我不明白那些字母的含义。
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:乙:电子:→:
最佳答案
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. [...]
T
是一种语言 Type
在这种情况下,可迭代项的类型也是函数 f
的类型必须返回。→
告诉你 return type
整个函数(map
)在这种情况下是一个Iterable
的 T
f
是应用于 Element e
的函数它作为参数传递给函数,这样函数就可以用这个当前值做一些操作,然后返回一个类型为 T
的新值。基于元素的值 e
.如果您导航 Iterable map
function definition你会看到:
Iterable<T> map <T>(
T f(
E e
)
)
所以我想从确切的 map<T>
开始完善我的答案OP 的功能,然后切换到更复杂的示例。
为了阐明所有这些,让我们以 Iterable 类的具体类 Set 为例。类选择 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>
以便 值与原始 map 的值相同,但用前缀 "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
元素的值 E
的 Set
我们正在修改。我们甚至不必指定类型,因为它是通过方法定义推断的,这是泛型的强大功能之一。
该函数(闭包)将一次应用于所有 Set 的元素,但您将其写为一次闭包。
总结一下:
T
是字符串E
是我们在函数内部处理的元素f
是我们的结束让我们用一个更复杂的例子来更深入。我们现在将处理 Dart Map类。
它的 map
函数定义如下:
map<K2, V2>(MapEntry<K2, V2> f(K key, V value)) → Map<K2, V2>
所以在这种情况下,前一个和第三个 T
是(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>
这样(像以前一样)
值与原始 map 的值相同,但用前缀
."new:"
包围
同样,您也可以用这种方式编写闭包(您的 f
函数)(也许它更好地突出了一个事实,即它是一个基于当前 map 条目值创建全新 MapEntry 的幻想)。
var myNewMap = myMap.map((key, value) {
String newString = "new:" + value;
return MapEntry(key, newString);
});
所有这些符号都称为 Generics因为它们是通用占位符,根据您使用它们的上下文对应于一种或另一种类型。
这是上面链接的摘录:
Using generic methods
Initially, Dart’s generic support was limited to classes. A newer syntax, called generic methods, allows type arguments on methods and functions:
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;
}Here the generic type parameter on first () allows you to use the type argument T in several places:
In the function’s return type (
T
). In the type of an argument (List<T>
). In the type of a local variable (T tmp
).
关注这个link用于泛型名称约定。
关于dart - 'T'、 'f'、 'E'、 'e'、 '→' 在 dart/flutter 文档中代表什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53894436/
我对这个错误很困惑: Cannot implicitly convert type 'System.Func [c:\Program Files (x86)\Reference Assemblies\
考虑这段代码: pub trait Hello { fn hello(&self); } impl Hello for Any { fn hello(&self) {
问题很简单。是否可以构造这样一个类型 T,对于它下面的两个变量声明会产生不同的结果? T t1 = {}; T t2{}; 我已经研究 cppreference 和标准一个多小时了,我了解以下内容:
Intellij idea 给我这个错误:“Compare (T, T) in Comparator cannot be applied to (T, T)” 对于以下代码: public class
任何人都可以告诉我 : n\t\t\t\t\n\t\t\t 在以下来自和 dwr 服务的响应中的含义和用途是什么. \r\n\t\t\t \r\n\t\t\t
让 T 成为一个 C++ 类。 下面三个指令在行为上有什么区别吗? T a; T a(); T a = T(); T 为不带参数的构造函数提供了显式定义这一事实是否对问题有任何改变? 后续问题:如果
Rust中的智能指针是什么 智能指针(smart pointers)是一类数据结构,是拥有数据所有权和额外功能的指针。是指针的进一步发展 指针(pointer)是一个包含内存地
比如我有一个 vector vector > v={{true,1},{true,2},{false,3},{false,4},{false,5},{true,6},{false,7},{true,8
我有一个来自 .xls 电子表格的数据框,我打印了 print(df.columns.values) 列,输出包含一个名为:Poll Responses\n\t\t\t\t\t。 我查看了 Excel
This question already has answers here: What are good reasons for choosing invariance in an API like
指针类型作为类型前缀与在类型前加斜杠作为后缀有什么区别。斜线到底是什么意思? 最佳答案 语法 T/~ 和 T/& 基本上已被弃用(我什至不确定编译器是否仍然接受它)。在向新向量方案过渡的初始阶段,[T
我正在尝试找到一种方法来获取模板参数的基类。 考虑以下类: template class Foo { public: Foo(){}; ~Foo(){};
这是一个让我感到困惑的小问题。我不知道如何描述它,所以只看下面的代码: struct B { B() {} B(B&) { std::cout ::value #include
为什么有 T::T(T&) 而 T::T(const T&) 更适合 copy ? (大概是用来实现move语义的???) 原始描述(被melpomene证明是错误的): 在C++11中,支持了一种新
在 Java 7 中使用 eclipse 4.2 并尝试实现 List 接口(interface)的以下方法时,我收到了警告。 public T[] toArray(T[] a) { ret
假设有三个函数: def foo[T](a:T, b:T): T = a def test1 = foo(1, "2") def test2 = foo(List(), ListBuffer()) 虽
我对柯里化(Currying)和非柯里化(Currying)泛型函数之间类型检查的差异有点困惑: scala> def x[T](a: T, b: T) = (a == b) x: [T](a: T,
考虑一个类A,我如何编写一个具有与相同行为的模板 A& pretty(A& x) { /* make x pretty */ return x; } A pretty(A&& x) {
Eclipse 表示由于泛型类型橡皮擦,类型参数不允许使用 instanceof 操作。 我同意在运行时不会保留任何类型信息。但是请考虑以下类的通用声明: class SomeClass{ T
在 C++14 中: 对于任何整数或枚举类型 T 以及对于任何表达式 expr: 有没有区别: struct S { T t { expr }; }; 和 struct S { T t = { exp
我是一名优秀的程序员,十分优秀!