Google Dart:.where()函数如何工作?

Asp*_*ger 6 dart

var fruits = ['apples', 'oranges', 'bananas'];
fruits[0]; // apples
fruits.add('pears');
fruits.length == 4;
fruits.where((f) => f.startsWith('a')).toList();
Run Code Online (Sandbox Code Playgroud)

文档中的示例显示了上述内容.我也不太了解该方法的文档.

https://api.dartlang.org/stable/1.21.1/dart-collection/IterableMixin/where.html

我目前看到一个lambda函数作为参数在哪里,其中有参数f.什么是f?我有点困惑.

如果我能看到一个有效的例子,那就太棒了.现在看来,我真的不明白.我不知道它是如何工作的,或者除了它作为某种过滤器之外还有什么作用.

Gün*_*uer 5

是一个匿名函数,并且f是它接受的参数

(f) => f.startsWith('a')
Run Code Online (Sandbox Code Playgroud)

where(...)调用为每个元素传递函数的函数,fruits并返回一个仅返回函数返回值的可迭代对象true

where(...)是懒惰的,因此仅当实际访问结果(如)时,才会发生传递函数的迭代和调用.toList()

DartPad示例

更新

“匿名”是指该函数没有名称,与诸如

myFilter(f) => f.startsWith('a');

main() {
  fruits.where(myFilter).toList();
}
Run Code Online (Sandbox Code Playgroud)

myFilter(f) => f.startsWith('a');
Run Code Online (Sandbox Code Playgroud)

只是

myFilter(f) {
  return f.startsWith('a');
}
Run Code Online (Sandbox Code Playgroud)

  • where()是一种可以使用自定义过滤器功能“配置”的方法。当然还有其他方法。有很多方便的方法可以很容易地以功能编程风格链接在一起,例如`fruits.where((f)=> f.startsWith('a'))。skip(1).take(2).map ((f)=>'您是否想要一些$ f?')。forEach(print);` (2认同)
  • 是的,我告诉编程学校的一些同事,由于工作流程的差异很大,他们现在只使用飞镖。我只是注意到es6就像是廉价的副本。我无法回到js。 (2认同)