我们经常测试哈希映射是否存在某个键,例如:data
,通过针对 测试对该键的值的试验检索nil
,如
(defn test-my-hash-map [my-hash-map]
(if (:data my-hash-map) 42 "plugh!"))
这会42
为包含:data
具有任何值的键的任何哈希映射生成,除了value nil
。
(map test-my-hash-map
[{:data "Hello!"} ; ~~> 42
{:no-data "Yikes!"} ; ~~> "plugh!"
{:data nil} ; ~~> "plugh!", but I need it to say 42 :(
])
我根本看不到有任何方法可以做到这一点,这会弄乱一些数据处理场景,在这些场景中,我们从非 Clojure 源获取数据,其中缺少的键意味着“我在那个键上没有数据”和带有nil
值的键意味着“我那里有数据,但无论出于何种原因我都无法将其提供给您”。我看不到在 Clojure 代码中区分这些情况的方法。我非常讨厌的解决方法是插入一个 Java shim,它可以检测差异并在移交给 Clojure 之前为特殊情况插入额外的列(键)。