You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何判断Clojure哈希映射中某值是否存在且等于nil?

区分Clojure Map中键不存在与键值为nil的情况

在Clojure编程时,这两种场景用nil?判断会得到相同结果,很容易造成混淆:

(nil? (:potato {}))
=> true
(nil? (:potato {:potato nil}))
=> true

你可以通过以下方式区分这两种情况:

方法1:用内置函数contains?判断键是否存在

contains?会直接检查map中是否包含指定键,和键值无关:

(contains? {} :potato)
=> false
(contains? {:potato nil} :potato)
=> true

方法2:实现自定义的property-nil?函数

如果想要直接得到你需求中的判断结果,可以自己封装函数:

(defn property-nil? [m k]
  (and (contains? m k) (nil? (get m k))))

测试效果:

(property-nil? {} :potato)
=> false
(property-nil? {:potato nil} :potato)
=> true

方法3:利用get的默认值区分

给get传入一个特殊的默认值(比如自定义的命名空间关键字),以此区分“键不存在”和“键值为nil”:

(let [val (get {} :potato ::not-found)]
  (= val ::not-found))
=> true
(let [val (get {:potato nil} :potato ::not-found)]
  (= val ::not-found))
=> false

内容的提问来源于stack exchange,提问作者Terbiy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 02:53:09