晦涩的Dart语法

时间:2013-11-11 13:20:50

标签: dart

在完成Dart Route library example for client side coding工作时,我遇到了这个片段

 var router = new Router()
    ..addHandler(urls.one, showOne)
    ..addHandler(urls.two, showTwo)
    ..addHandler(urls.home, (_) => null)
    ..listen();

我的问题是(_) => null如何运作?它似乎指定了一个返回空值的函数,但(_)是什么意思?

3 个答案:

答案 0 :(得分:7)

(_)表示它是一个带有一个参数的函数,但您不关心该参数,因此它只是命名为_。你也可以写(ignoreMe) => null。这里重要的是,需要一个接受一个参数的函数。你用它做什么,是你的事。

答案 1 :(得分:7)

(_) => null表示:一个函数,它接受一个名为_的参数并返回null 。它可以被视为(iDontCareVariable) => null的快捷方式。

没有参数的类似函数是() => null

具有更多参数的类似函数将是(_, __, ___) => null

请注意,_不是langauge级别定义的特殊语法。它只是一个可以在函数体内使用的变量名。例如:(_) => _

答案 2 :(得分:0)

我将尝试通过示例解释这一点。

void main() {
  var helloFromTokyo = (name) => 'こんにちわ $name';
  var greet = new Greet();      
  greet.addGreet('London', helloFromLondon)
  ..addGreet('Tokyo', helloFromTokyo)  
  ..addGreet('Berlin', helloFromBerlin)
  ..addGreet('Mars', (_) => null)
  ..addGreet('Me', (name) => 'Privet, chuvak! You name is $name?')
  ..addGreet('Moon', null);

  greet.greet('Vasya Pupkin');
}

String helloFromLondon(String name) {
  return 'Hello, $name';
}

String helloFromBerlin(String name) {
  return 'Guten tag, $name';
}

class Greet {
  Map<String, Function> greets = new Map<String, Function>();

  Greet addGreet(String whence, String sayHello(String name)) {
    greets[whence] = sayHello;
    return this;
  }

  void greet(String name) {
    for(var whence in greets.keys) {
      var action = greets[whence];
      if(action == null) {
        print('From $whence: no reaction');
      } else {
        var result = action(name);
        if(result == null) {
          print('From $whence: silent');
        } else {
          print('From $whence: $result');
        }
      }
    }
  }
}

输出:

From London: Hello, Vasya Pupkin
From Tokyo: こんにちわ Vasya Pupkin
From Berlin: Guten tag, Vasya Pupkin
From Mars: silent
From Me: Privet, chuvak! You name is Vasya Pupkin?
From Moon: no reaction