[英]What does `forEach((c) => c())` mean in Dart?
我無法理解這段代碼的最后一行。
callbacks.add(() => print(i));
對我來說似乎很明顯:添加將i
打印到數組的匿名函數。
但.forEach((c) => c());
我無法理解。
=>
按照我的理解將函數的頭部與body分開,所以它看起來像我的函數聲明。 但是,它似乎為每個人聲明了這個功能 - 但那是無稽之談。
var callbacks = [];
for (var i = 0; i < 2; i++) {
callbacks.add(() => print(i));
}
callbacks.forEach((c) => c());
(c) => c()
定義帶有無類型參數c
的匿名函數。 為列表中的每個項調用的函數執行c
引用的回調函數。 此外, (c) => c()
函數在其體內只包含一個語句c()
,因此,它使用=>
- 胖箭頭表示法縮短。 否則,它可以寫成(c) { c(); }
(c) { c(); }
。
有關詳細信息,請參閱匿名函數
如果callbacks
是一組回調函數
你有這樣的事情:
callbacks = [a, b, c, d, e];
調用callbacks.forEach()
意味着對回調中的“each”元素執行某些操作。
函數.forEach()
為數組中的“每個值”調用一個函數:
var array1 = ['a', 'b', 'c'];
array1.forEach(function(element) {
console.log(element);
});
// expected output: "a"
// expected output: "b"
// expected output: "c"
從這里復制。
但是,在您的情況下,每個元素本身就是一個函數,並且您為每個元素賦予別名c
而不是element
。
callbacks.forEach((c) => c());
這也可以寫成:
// Where c is each element
callbacks.forEach( function(c) {
// Call c, which is the ith element
// in the array 'callbacks'
c();
});
但是,由於你有一個“可調用”函數數組,你正在執行回調函數數組中的每個回調,因此 - c();
所以你循環遍歷一系列函數並執行每一個函數。 這是語法糖:
// Array of functions
let callbacks = [a, b, c, d, e];
// Loop through array
for (let i = 0; i < callbacks.length; i++) {
let f = callbacks[i];
// Call each function
f();
}
從一個簡單的例子中了解:
import 'dart:io';
void main() {
var listOfCallbacks = [
() => stdout.write('h'),//printt will add new line stdout.write() will not do that
() => stdout.write('e'),
() => stdout.write('l'),
() => stdout.write('l'),
() => stdout.write('o'),
];
listOfCallbacks.forEach((c) => c()); //hello
}
List
包含使用forEach
的函數列表(回調),遍歷每個回調(元素)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.