我正在学习Dart并且看到以下习语:
someFuture.then((_) => someFunc());
我也见过像这样的代码:
someOtherFuture.then(() => someOtherFunc());
这两个例子之间是否存在功能差异?Aka,_
作为参数传递给Dart函数有什么作用?
鉴于Dart _
用作声明私有函数的前缀,这尤其令人困惑.
谢谢.
Zec*_*umo 36
它是一个_
通常命名的变量,因为您打算不使用它并扔掉它.例如,您可以使用名称x
或foo
替代.(_)
和之间的区别()
很简单,一个函数接受一个参数而另一个函数不接受参数.
下划线 ( _
) 通常表示您不会在块中使用此参数。这只是一种编写代码的巧妙方法。
假设我有一个带有两个参数的方法useful
,并且useless
我没有useless
在代码块中使用:
void method(int useful, int useless) {
print(useful);
}
Run Code Online (Sandbox Code Playgroud)
由于useless
不会使用变量,我应该将上面的代码编写为:
void method(int useful, int _) { // 'useless' is replaced with '_'
print(useful);
}
Run Code Online (Sandbox Code Playgroud)
来自 Dart 文档 - PREFER 使用_
、__
等来表示未使用的回调参数。
有时回调函数的类型签名需要参数,但回调实现不使用该参数。在这种情况下,习惯上将未使用的参数命名为
_
。如果函数有多个未使用的参数,请使用额外的下划线以避免名称冲突:__
、___
等。Run Code Online (Sandbox Code Playgroud)futureOfVoid.then((_) { print('Operation complete.'); });
本指南仅适用于匿名函数和本地函数。这些函数通常在明确未使用参数代表什么的上下文中立即使用。相反,顶级函数和方法声明没有该上下文,因此必须命名它们的参数,以便清楚每个参数的用途,即使不使用它。
将以下代码复制粘贴到DartPad中并点击运行 -
void main() {
Future.delayed(Duration(seconds: 1), () {
print("No argument Anonymous function");
});
funcReturnsInteger().then((_) {
print("Single argument Anonymous function " +
"stating not interested in using argument " +
"but can be accessed like this -> $_");
});
}
Future<int> funcReturnsInteger() async {
return 100;
}
Run Code Online (Sandbox Code Playgroud)