【发布时间】:2019-06-16 04:05:58
【问题描述】:
有没有简单的方法来调用带有空检查的函数?
Function(String) onTextReady;
有没有一种简单的方法可以安全地调用这个函数。 例如,在 Kotlin 中,我会使用调用:
onTextReady?.invoke('Hello world');
我试过onTextReady?.('Hello world');,但 Dart 不支持这个。
【问题讨论】:
标签: dart
有没有简单的方法来调用带有空检查的函数?
Function(String) onTextReady;
有没有一种简单的方法可以安全地调用这个函数。 例如,在 Kotlin 中,我会使用调用:
onTextReady?.invoke('Hello world');
我试过onTextReady?.('Hello world');,但 Dart 不支持这个。
【问题讨论】:
标签: dart
嗯,简短的回答,不(与操作员一起)。 Dart 中的空值感知 ?. 运算符仅适用于对成员的对象调用,而不是直接对函数执行进行空值检查。
在下面的这种情况下,它会起作用:
class MyClass {
Function(String s) onTextReady = (s) => print(s);
}
main() {
var nullObject;
nullObject?.onTextReady('null'); // do nothing
var notNull = MyClass();
notNull?.onTextReady('not null'); // print 'not null'
}
您需要手动检查 (!= null) 是否安全:
main() {
Function(String) onTextReady;
if(onTextReady != null) {
onTextReady('null');
}
Function(String) onTextReady2 = (s) => print(s);
if(onTextReady2 != null) {
onTextReady2('not null');
}
}
【讨论】:
clazz 用于命名包含对类的引用的变量,在您的情况下,您使用它来命名一个令人困惑的对象。