dart - 如何在 Dart 中模拟 undefined
问题描述
在 JS 中,有 undefined 和 null。undefined 表示“没有值”,null 表示“值相当于空虚”。然而,在 Dart 中(可能在其他语言中,我不知道,但现在我正在使用 Dart),没有未定义的,只有 null。因此,不可能区分等同于空性的价值和不存在价值。
在 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 包中)。
推荐阅读
- powershell - 在 PowerShell 脚本中读取目录中的文件
- python - Pytorch fasterrcnn resnet50 fpn 损失函数
- python - 是什么导致 Tkinter 回调中的异常?
- javascript - 找到元素数量最多的对象
- pyspark - 某些步骤后,AWS 日志未写入云手表
- python - 波形写入功能不起作用,我做错了什么?
- python - 如何从兄弟包进行python相对导入
- windows - Bash 终端在 VSCode 中崩溃。`usr/bin/bash: 找不到配置文件/usr/local/etc/profile.global; 退出。`
- c# - ASP NET Identity - 有条件地检查 RequireConfirmedPhoneNumber
- node.js - 已安装全局 NPM 包,但未找到可执行文件,Windows 10