【问题标题】:optionals vs null-safe types?可选项与空安全类型?
【发布时间】:2020-07-05 10:26:38
【问题描述】:

解决十亿美元错误的两种不同方法。对我来说,前者似乎非常冗长(因此非常低级),但一些语言(例如 Rust 或 Haskell)选择通过完全删除 null 来强制执行它。为什么?与 null 安全类型相比,可选项有哪些优势?

【问题讨论】:

  • 我不明白。 Haskell 具有 null 安全类型,因为它们不能为 null。
  • Haskell 如何remove为空?您正在添加一个不需要的前提,即那里有一些空值。 Null 只是一个不指向任何内容的引用的哨兵值,您不关心 Haskell 中的引用,只关心值(这些值是否实现为指向值的指针是一个实现细节)。
  • @Guildenstern 对于空安全类型,我的意思是显式可空性,例如 Kotlin 中的 StringString?。也许“删除”是错误的词,我应该说“未实施”。

标签: null optional nullable


【解决方案1】:

I have asked the same question on r/ProgrammingLanguages and got some useful answers

TLDR:可选项可以嵌套

假设我们有一个Map<int, Optional<string>> 并查找一个密钥。返回值的类型为Optional<Optional<string>>。如果外部可选项为空,则未找到键,如果内部可选项为空,则已找到键但映射到不存在的值。

如果我们使用可空性Map<int, String?>,那么这种区别就变得不可能了,因为我们在两种情况下都只得到null,这需要我们进行第二次查找,例如myMap.containsKey()

【讨论】:

    猜你喜欢
    • 2023-03-04
    • 1970-01-01
    • 2012-10-31
    • 2016-01-05
    • 1970-01-01
    • 1970-01-01
    • 2020-01-24
    • 2012-08-01
    • 1970-01-01
    相关资源
    最近更新 更多