Clojure函数#(:jerry@%)是什么意思
我在Clojure是个新手。我在Clojure Koans的帮助下学习。我找到了一个答案,代码如下:Clojure函数#(:jerry@%)是什么意思,clojure,Clojure,我在Clojure是个新手。我在Clojure Koans的帮助下学习。我找到了一个答案,代码如下: (= ["Real Jerry" "Bizarro Jerry"] (do (dosync (ref-set the-world {}) (alter the-world assoc :jerry "Real Jerry") (alter bizarro-world assoc :jerry "Bizar
(= ["Real Jerry" "Bizarro Jerry"]
(do
(dosync
(ref-set the-world {})
(alter the-world assoc :jerry "Real Jerry")
(alter bizarro-world assoc :jerry "Bizarro Jerry")
(vec (map #(:jerry @%) [the-world bizarro-world]))))))
发件人:
对谷歌来说,像“Clojure@%”这样搜索是非常不友好的。所以我从互联网上一无所获
函数“#”(:jerry@%)是如何工作的
下面的代码是我的答案,但它不起作用
(= ["Real Jerry" "Bizarro Jerry"]
(do
(dosync
(ref-set the-world {})
(alter the-world assoc :jerry "Real Jerry")
(alter bizarro-world assoc :jerry "Bizarro Jerry")
(vec (map (fn [x] (:jerry x)) [the-world bizarro-world]))
)))
#(…)
是一个函数,其中%
表示传递给函数的第一个参数。例如:
(def coll [(ref {:jerry 21})
(ref {:jerry 42})])
=> #'user/coll
(map #(:jerry @%) coll)
=> (21 42)
#(println%)
相当于:
(fn[x](println x))
@
又是一个so:
@某些变量
同:
(删除一些变量)
和用于从其中一个中取消引用当前值
因此,
#(:jerry@%)
是一个匿名函数,当应用于ref(例如原子)时,该函数将deref
其当前值,并将其用作参数,用该值调用:jerry
。世界
和bizarro世界
都是“可撤销的”,这意味着您可以在前面使用@
来获取它们的值
您正在使用一个匿名函数,由#()
表示。在匿名函数中,百分号%
表示函数的参数
因此,@%
的意思是“将参数解引用到此函数。”
:jerry
是一个用作函数的关键字,它获取与映射中的键:jerry
关联的值
例如:
(def coll [(ref {:jerry 21})
(ref {:jerry 42})])
=> #'user/coll
(map #(:jerry @%) coll)
=> (21 42)
此外,你可以在clojure中找到其他“奇怪”的符号。
先生,你真让我高兴!我很高兴能帮上忙。