null 和 ()=>null 有什么区别?

时间:2021-03-22 07:37:33

标签: dart null closures

我是 dart 新手,对 null_closures 感到困惑。

例如:

void _test1({VoidCallback callback}) {
  callback();
}

当我用作时会崩溃:

_test1(callback: null);

但效果很好:

_test1(callback: () => null);

为什么?

1 个答案:

答案 0 :(得分:3)

_test1(callback: null);

在这种情况下,callbacknull。试图通过访问属性(有一些例外)或通过调用它的方法来取消引用 null 将导致异常。 (在大多数其他语言中,这将是一个空指针异常。在 Dart 中,null 是一个特殊对象(类型为 Null),因此尝试对其调用方法通常会抛出一个 {{ 1}} 错误。)

NoSuchMethod

在这种情况下,_test1(callback: () => null); 是一个 函数callback 类型的对象),当该函数返回时,它返回 Function被调用。