首页 > 解决方案 > 如何在 Dart 中模拟 undefined

问题描述

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

在 Dart 中是否有模拟这种差异的标准方法?

标签: dart

解决方案


否。null值(类型Null)是唯一表示缺少值的内置值。它不区分为什么该值不存在。

它也是(几乎)唯一可以在类型系统中直接与另一种类型组合的类型。使用 null 安全性,您将能够编写int?for int-or- Null

如果您想要另一个缺席标记,您可以使用(或编写)如下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");
}

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


推荐阅读