簡體   English   中英

什么`forEach((c)=> c())`在Dart中意味着什么?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM