【发布时间】:2016-04-09 03:28:11
【问题描述】:
我正在阅读一些 Clojure 代码,其中包含一堆未初始化的值,如 nil,用于传递记录中的数值。
现在有很多 Clojure 库 treat this as idiomatic。这意味着它是一个公认的约定。
但这也会导致NullPointerException,因为并非所有Clojure 核心函数都可以处理nil 作为输入。 (他们也不应该)。
其他语言具有Maybe 或Option 的概念,以在值为空的情况下代理该值,作为减轻NullPointerException 风险的一种方式。这在 Clojure 中是可能的 - but not very common。
您可以使用fnil 做一些技巧,但它并不能解决所有问题。
另一种选择是将未初始化的值设置为:empty-value 之类的符号,以强制用户在所有处理代码中显式处理此场景。但这并不是nil 的一大进步——因为直到运行时您才真正发现所有场景(在其他人的代码中)。
我的问题是:在 Clojure 中是否有一个惯用的替代 nil-punning 的方法?
【问题讨论】: