在clojure中将变量用作dict键

在clojure中将变量用作dict键,clojure,Clojure,假设我有这样的代码 (def person {:name "Steve" :age 24 :salary 7886 :company "Acme"}) (def nm 'name) (println (person :nm)) 我想使用nm变量作为个人字典的密钥,就像我在最后一行中尝试的那样。在clojure中可能吗?是的,但地图使用的是关键字:名称,而不是符号名称,因此您需要将代码更改为 (def nm :name) (println (person

假设我有这样的代码

(def person {:name "Steve" :age 24 :salary 7886 :company "Acme"})
(def nm 'name)
(println (person :nm))

我想使用nm变量作为个人字典的密钥,就像我在最后一行中尝试的那样。在clojure中可能吗?

是的,但地图使用的是关键字:名称,而不是符号名称,因此您需要将代码更改为

(def nm :name)
(println (person nm))
或IMHO:

(println (get person nm))
结果

(person nm)     => "Steve"
(get person nm) => "Steve"

另外,请参见Clojure备忘单。

是的,但地图使用的是关键词:名称,而不是符号名称,因此您需要将代码更改为

(def nm :name)
(println (person nm))
或IMHO:

(println (get person nm))
结果

(person nm)     => "Steve"
(get person nm) => "Steve"

另外,请参见Clojure备忘单。

这里的关键字和符号有些混淆

(type 'name)
clojure.lang.Symbol
(type :nm)
clojure.lang.Keyword
所以你的关键人物就是关键词。您的def nm是一个符号。和 您的呼叫人再次使用关键字

所以你最好在这里使用关键词。例如

(def nm :name)
#'user/nm
(println (person nm))
Steve

这里的关键字和符号有些混乱

(type 'name)
clojure.lang.Symbol
(type :nm)
clojure.lang.Keyword
所以你的关键人物就是关键词。您的def nm是一个符号。和 您的呼叫人再次使用关键字

所以你最好在这里使用关键词。例如

(def nm :name)
#'user/nm
(println (person nm))
Steve

我认为像函数一样使用键更为惯用 在后台定义dict person时,所有键都被定义为该类型/dict对象的访问器函数:

(:name person) ;; => "Steve"

;; or:
(def nm :name)
(nm person) ;; => "Steve"

我认为像函数一样使用键更为惯用 在后台定义dict person时,所有键都被定义为该类型/dict对象的访问器函数:

(:name person) ;; => "Steve"

;; or:
(def nm :name)
(nm person) ;; => "Steve"