在完成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
如何运作?它似乎指定了一个返回空值的函数,但(_)
是什么意思?
答案 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