forEach()迭代没有定义方法

时间:2013-04-30 00:30:37

标签: dart

对于令人困惑的标题感到抱歉,但我真的不知道如何总结这个问题。

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);
});

当然,这段代码不起作用,但我希望它能说明我想做的事情。有没有办法实现这个目标?

1 个答案:

答案 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;
}
相关问题