null 和 ()=>null 有什么区别?
What's the difference between null and ()=>null?
我是飞镖新手,对null_closures感到困惑。
例如:
void _test1({VoidCallback callback}) {
callback();
}
当我用作时会崩溃:
_test1(callback: null);
但效果很好:
_test1(callback: () => null);
为什么?
_test1(callback: null);
在这种情况下,callback
是 null
。尝试通过访问属性(有一些例外)或调用其上的方法来取消引用 null
将导致异常。 (在大多数其他语言中,这将是一个空指针异常。在 Dart 中,null
是一个特殊对象(类型为 Null
),因此尝试调用它的方法通常会抛出一个 NoSuchMethod
错误。)
_test1(callback: () => null);
在这种情况下,callback
是 函数(Function
类型的对象)returns null
调用该函数时。
我是飞镖新手,对null_closures感到困惑。
例如:
void _test1({VoidCallback callback}) {
callback();
}
当我用作时会崩溃:
_test1(callback: null);
但效果很好:
_test1(callback: () => null);
为什么?
_test1(callback: null);
在这种情况下,callback
是 null
。尝试通过访问属性(有一些例外)或调用其上的方法来取消引用 null
将导致异常。 (在大多数其他语言中,这将是一个空指针异常。在 Dart 中,null
是一个特殊对象(类型为 Null
),因此尝试调用它的方法通常会抛出一个 NoSuchMethod
错误。)
_test1(callback: () => null);
在这种情况下,callback
是 函数(Function
类型的对象)returns null
调用该函数时。