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

为何将hash map作为函数参数传入后get方法返回nil?

问题分析与解决

问题出在函数调用的语法细节上:

  • Clojure中调用函数必须使用圆括号,你在调用bill-total时错误用了方括号[],这会创建一个包含目标hash-map的向量,最终传给函数的参数是这个向量,而非你期望的hash-map本身。
  • 当执行(get bill "b")时,是从向量中查找键为"b"的元素,但向量的键是整数索引(0、1、2...),自然找不到对应值,所以返回nil。

修正后的调用代码

(bill-total (hash-map "z" 1 "b" 2 "a" 3))

直接用圆括号包裹hash-map作为参数传入,(get bill "b")就能正确获取到值2。

额外建议

第一段代码里在函数内部用def定义全局变量demokeys的做法不推荐,应该用let定义局部变量,避免污染全局命名空间:

(defn example []
  (let [demokeys (hash-map "z" 1 "b" 2 "a" 3)]
    (println demokeys)
    (println (get demokeys "b"))))
(example)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 03:35:21