我有一个从关键字到指南针方向字符串的地图:
(def dirnames {:n "North", :s "South", :e "East", :w "West"})
我可以使用地图作为函数查找名称:
(dirnames :n)
;# = "North"
在我看来
(map dirnames [:n :s])
应该返回向量
["North" "South"]
但它返回
[:n :s]
代替。我尝试过这六种方法,在(map)调用中提供不同的函数来代替“dirnames”,并且我总是得到关键字的向量。
显然,我遗漏了一些基本的东西。它是什么?
答案 0 :(得分:2)
对我有用,我误解了这个问题:
user> (def dirnames {:n "North", :s "South", :e "East", :w "West"})\
#'user/dirnames
user> (map dirnames [:n :s])
("North" "South")
也:
user> (map #(dirnames %) [:n :s])
("North" "South")
user> (mapv #(dirnames %) [:n :s])
["North" "South"]
答案 1 :(得分:2)
(defn foo [dirnames]
map dirnames [:n :s])
它看起来几乎是正确的,但它评估副作用的map
,然后dirnames
评估副作用(两者都不做任何事情),然后最终返回[:n :s]
。对于像你所描述的那样的行为,这是我能想到的唯一合理的解释。