对于令人困惑的标题感到抱歉,但我真的不知道如何总结这个问题。
Dart中继承Iterable
的类具有forEach()
方法。虽然它们很好并且易于使用,但我经常处于这样的情况:我希望使用该值进行少量操作,而无需为其定义方法,以提高代码的可读性。例如,像PHP的foreach
语法。所以不要写:
void main() {
List<int> l = [1, 2, 3];
l.forEach(doSomethingWithValue);
}
void doSomethingWithValue(int val) {
String str = getStringFor(val);
print(str);
}
我想写这样的东西:
l.forEach((val) => {
String str = getStringFor(val);
print(str);
});
当然,这段代码不起作用,但我希望它能说明我想做的事情。有没有办法实现这个目标?
答案 0 :(得分:8)
你实际上非常接近;你只需要摆脱=>
。这是单表达式函数体的语法。要在主体中定义一个具有多个语句的函数,并在括号内分组,括号内的主体遵循带括号的参数列表,而不包含=>
:
l.forEach((val) {
String str = getStringFor(val);
print(str);
});
请注意,此概念适用于命名函数以及示例中的匿名函数。
void doSomethingWithValue(int val) => print(val);
与
相同void doSomethingWithValue(int val) {
print(val);
}
另请注意,=>
形式的函数体返回其表达式的值:
int tripleValue(int val) => val * 3;
与
相同int tripleValue(int val) {
return val * 3;
}