在阅读飞镖代码时,我经常看到一些仅带有下划线_参数调用的函数。它使我烦恼了一段时间,并且由于flutter改善了其分析消息,因此我有一些线索…但是我觉得我不太了解这个概念:-(
昨天我为测试写了以下内容:
when(mockDevice.getLocalPath()).thenAnswer(() async => fileFolder);
并获得以下分析
错误:参数类型’Future Function()’不能分配给参数类型’Future Function(Invocation)’。
添加下划线时,它可以正常工作。
when(mockDevice.getLocalPath()).thenAnswer((_) async => fileFolder);
我遇到的最令人恐惧的示例来自@remi rousselet编写的提供程序包
builder: (_, counter, __) => Translations(counter.value),
来自提供者示例:
Widget build(BuildContext context) { return MultiProvider( providers: [ ChangeNotifierProvider(builder: (_) => Counter()), ProxyProvider<Counter, Translations>( builder: (_, counter, __) => Translations(counter.value), ), ], child: Foo(), ); } class Translations { const Translations(this._value); final int _value; String get title => 'You clicked $_value times'; }
下划线通常表示您将不在块内使用该参数,这只是编写代码的好方法,例如:
method(int useful, int useless) { // say I am only going to use 'useful' in this block }
上面的代码也可以写成:
method(int useful, int _) { // using '_' means I'm not going to use 2nd parameter in the block }
现在回答您的问题:
意味着你有3个参数_,counter并且__,只有counter是你使用的是什么,所以第一和第三参数,标注_和__。这是编写代码的更简洁的方法。
_
counter
__