我们知道clojure在阅读unicode字符到阅读器输出的实际评估的几个阶段评估(+ 1 1)......
在代码中,看起来像是(eval (read-string "(+ 1 1)"))
然而当('+ '1 '2)
(或('+ 1 2)
)给我2时,它会伤害我的大脑。 ......
核心> (def something(' +' 1' 2))
#' alcamii4hr.core / something
核心> (输入内容)
java.lang.Long
答案 0 :(得分:0)
符号与关键字一样,可以像函数一样调用。调用时,它们都做同样的事情,看看自己认为是地图。他们有两个ar [a-map]
和[a-map not-found]
。
;; not-found defaults to nil
('foo {'bar 42}) ;=> nil
('foo {'foo 42}) ;=> 42
;; not-found can also be supplied in the arity-2 case
('foo {'bar 42} :not-found) ;=> :not-found
在您的具体情况下,它只是假设第一个参数是关联的,并且不检查。它无法在地图中找到符号+
,因此它会返回未找到的值:2
。
('+ '1) ;=> nil ; not-found
('+ '1 '2) ;=> 2 ; because 2 is the not-found values
('+ '1 '2 '3) ;=> clojure.lang.ArityException
要了解这一切是如何组合在一起的,您可以查看invoke method on the symbol class, 它调用clojure.RT.get,这是一个在关联事物中看起来的东西。这与clojure.core/get调用的方法相同。
在clourescript中,它的工作方式相同,但实现方式不同。 (在clojurescript本身,而不是宿主语言。)你可以阅读here。