我目前正在学习Google Dart。我目前在试图理解从dart文档中取出的这段代码中发生了什么感到困惑:
Function makeAdder(num addBy) {
return (num i) => addBy + i;
}
void main() {
// Create a function that adds 2.
var add2 = makeAdder(2);
// Create a function that adds 4.
var add4 = makeAdder(4);
assert(add2(3) == 5);
assert(add4(3) == 7);
}
我发现很难理解的是
add2(3)
和add(3)
部分。我收集的makeAdder(2)
和makeAdder(4)
在它们自己的范围内分别将变量addBy
分配给2和4。因此,变量add2分配了2到addBy,变量add4分配了4到addBy。但是我不太明白这一点:在执行带有参数的函数(即add2(3)
和add4(3)
)时,参数不应该分配变量addBy
吗,所以addBy
应该分别等于变量的3? Dart如何知道将i分配给3而不是addBy?我希望我有道理。
最佳答案
makeAdder
接受一个参数(addBy
),并返回一个函数,该函数也接受一个参数(i
)。
当您调用var add2 = makeAdder(2)
时,此处的参数2
被传递给addBy
,该函数返回的lambda值等效于:
num add2(num i) {
return 2 + i;
}
稍后,当您调用
add2(3)
时,参数3
将传递给i
。关键是要了解
makeAdder
返回带有参数的函数。