4

在处理客户端编码的 Dart Route 库示例时, 我遇到了这个片段。

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

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

4

3 回答 3

7

(_)意味着它是一个带有一个参数的函数,但你不关心那个参数,所以它只是命名为_. 你也可以写(ignoreMe) => null。这里重要的是,需要有一个接受一个参数的函数。你用它做什么,是你的事。

于 2013-11-11T13:37:31.740 回答
7

(_) => null意思是:一个函数,它接受一个名为_并返回null的参数。它可以被视为(iDontCareVariable) => null.

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

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

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

于 2013-11-11T14:18:19.267 回答
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
于 2013-11-11T14:04:39.623 回答