Clojure函数#(:jerry@%)是什么意思

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

我在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 "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中找到其他“奇怪”的符号。

先生,你真让我高兴!我很高兴能帮上忙。