如何在 Dart 中模拟 undefined

pap*_*lon 1 dart

在JS中,有undefined和null。undefined 表示“没有值”,null 表示“相当于空的值”。然而,在 Dart 中(可能在其他语言中,我不知道,但现在我正在使用 Dart),没有未定义的,只有 null。因此,不可能区分等同于空的价值和没有价值。

Dart 中有模拟这种差异的标准方法吗?

lrn*_*lrn 6

不。null值(类型Null)是唯一表示值不存在的内置值。它不区分该值缺失的原因。

它也是(几乎)唯一可以直接在类型系统中与另一种类型组合的类型。通过空安全,您将能够编写int?-or- 。intNull

如果您想要另一个缺席标记,您可以使用(或编写)Option如下类型:

abstract class Option<T> {
  final T value;
  bool get hasValue => true;
  Option(this.value);
  factory Option.none() => const _OptionNone();
}

class _OptionNone implements Option<Never> {
  const _OptionNone();
  bool get hasValue => false;
  T get value => throw UnsupportedError("None option has no value");
}
Run Code Online (Sandbox Code Playgroud)

然后您可以表示值或不表示值。(这样的类已有实现,例如在 quiver 包中)。