4

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

Iterable在 Dart 中继承的类有一个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);
});

当然,这段代码不起作用,但我希望它演示了我想要做什么。有没有办法做到这一点?

4

1 回答 1

13

你实际上非常接近;你只需要摆脱=>. 这是单表达式函数体的语法。要定义一个在主体中包含多个语句的函数,并在括号内分组,括号内的主体遵循括号内的参数列表,而不是=>介于两者之间:

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;
}
于 2013-04-30T00:45:59.857 回答