forEach()迭代没有定义方法

Mar*_*ioP 3 dart

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

Iterable在Dart中继承的类有一个forEach()方法.虽然它们很好并且易于使用,但我经常处于这样的情况:我希望使用该值进行少量操作,而无需为其定义方法,以提高代码的可读性.foreach例如,像PHP的语法一样.所以不要写:

void main() {  
  List<int> l = [1, 2, 3];
  l.forEach(doSomethingWithValue);
}

void doSomethingWithValue(int val) {
  String str = getStringFor(val);
  print(str);
}
Run Code Online (Sandbox Code Playgroud)

我想写这样的东西:

l.forEach((val) => {
  String str = getStringFor(val);
  print(str);
});
Run Code Online (Sandbox Code Playgroud)

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

Dar*_*tle 11

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

l.forEach((val) {
  String str = getStringFor(val);
  print(str);
});
Run Code Online (Sandbox Code Playgroud)

请注意,此概念适用于命名函数以及示例中的匿名函数.

void doSomethingWithValue(int val) => print(val);
Run Code Online (Sandbox Code Playgroud)

是相同的

void doSomethingWithValue(int val) {
  print(val);
}
Run Code Online (Sandbox Code Playgroud)

另请注意,=>表单的函数体返回其表达式的值:

int tripleValue(int val) => val * 3;
Run Code Online (Sandbox Code Playgroud)

是相同的

int tripleValue(int val) {
  return val * 3;
}
Run Code Online (Sandbox Code Playgroud)