Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Clojure-如何准确评估符号?_Clojure_Functional Programming_Macros_Symbols - Fatal编程技术网

Clojure-如何准确评估符号?

Clojure-如何准确评估符号?,clojure,functional-programming,macros,symbols,Clojure,Functional Programming,Macros,Symbols,我们知道clojure在从读取unicode字符到实际评估读取器输出的两个阶段中计算(+1) 在代码中,这看起来像(eval(读取字符串“(+1)”) 然而当('+'1'2)(或('+12))给我2时,我的大脑受到了伤害 核心>(定义某些东西('+'1'2)) #'alcamii4hr.core/something 核心>(键入内容) java.lang.Long符号(如关键字)可以像函数一样调用。当被调用时,它们都做同样的事情,在它们认为是地图的地方查找自己。它们有两个算术数[a-map]和[

我们知道clojure在从读取unicode字符到实际评估读取器输出的两个阶段中计算(+1)

在代码中,这看起来像
(eval(读取字符串“(+1)”)

然而当
('+'1'2)
(或
('+12)
)给我2时,我的大脑受到了伤害

核心>(定义某些东西('+'1'2))
#'alcamii4hr.core/something
核心>(键入内容)

java.lang.Long

符号(如关键字)可以像函数一样调用。当被调用时,它们都做同样的事情,在它们认为是地图的地方查找自己。它们有两个算术数
[a-map]
[a-map notfound]

;; 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
要了解这一切是如何结合在一起的,您可以查看, 它调用,这是在关联对象中查找的对象。这与调用的方法相同

在clourescript中,其工作方式相同,但实现方式不同。(用clojurescript本身,而不是宿主语言)你可以阅读