我使用一些代码,无法理解这种语法原理: 示例:
SomeClass someClass = new SomeClass();
class SomeClass{
VoidCallback _callback;
set onCallback(VoidCallback callback){
_callback = callback;
}
someFunction(){
if(_callback != null){
_callback();
}
}
}
...在StatefulWidget类中的某处...
@override
void initState() {
super.initState();
someClass.onCallback = _onCallback;
}
_onCallback(){
print('callback');
}
我猜这里if(_callback != null){_callback()}
我们初始化了回调(如果不正确的话)。但是为什么在initState中我们调用不带参数的onCallback导致setter回调具有voidcallback参数呢?
答案 0 :(得分:1)
我不了解Dart,但我知道Java,JavaScript,Groovy和C / C ++都有一定的延伸。
您正在误解事物:
set onCallback(VoidCallback callback){
_callback = callback;
}
_callback = callback
是一个赋值:我们为_callback
赋参数callback
的值。
基于onCallback
的签名,尤其是 set ,表达式someClass.onCallback = _onCallback
也是赋值,除了它调用了 setter
据我了解,_callback
是一个函数,但默认值为null
。您不能调用null
之类的东西,因为否则会出错:Java / Groovy将抛出NullPointerException
,而Dart可能会类似。
因此以下代码在调用_callback
之前先检查其是否为空:
if(_callback != null){
_callback();
}
如前所述,我不了解Dart,但看到它是JavaScript的替代 (引自Wikipedia),您有相同的概念:每个对象都是引用,引用可以是{ {1}}。