gpt4 book ai didi

clojure - 如何在 Clojure 中区分缺失键和值为 nil 的键?

转载 作者:行者123 更新时间:2023-12-02 12:46:32 24 4
gpt4 key购买 nike

我们经常通过针对 nil 测试该键值的尝试检索来测试 HashMap 是否存在某个键,例如 :data,如下所示

(defn test-my-hash-map [my-hash-map]
(if (:data my-hash-map) 42 "plugh!"))

对于包含键 :data 和任何值的任何 HashMap ,这都会生成 42除了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 填充程序,该填充程序可以检测差异并在交给 Clojure 之前为特殊情况插入额外的列(键)。

最佳答案

有一个 clojure 函数 get 允许提供默认值。

(:foo {:bar 1}) ; ==> nil
(get {:bar 1} :foo "no key inserted") ; ==> "no key inserted"

当然还有包含?

(contains? {:bar 1} :bar) ; ==> true

关于clojure - 如何在 Clojure 中区分缺失键和值为 nil 的键?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18927908/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com