Clojure-如何准确评估符号?
我们知道clojure在从读取unicode字符到实际评估读取器输出的两个阶段中计算(+1) 在代码中,这看起来像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]和[
(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本身,而不是宿主语言)你可以阅读