Clojure 从字符串生成符号并将其作为函数应用
我只是在学习clojure,我遇到了麻烦 我试图将算术表达式作为中缀字符串读取,并在Clojure中处理它 e、 g.“1+2”->(+12) 我读入“+”并将其转换为如下符号:Clojure 从字符串生成符号并将其作为函数应用,clojure,Clojure,我只是在学习clojure,我遇到了麻烦 我试图将算术表达式作为中缀字符串读取,并在Clojure中处理它 e、 g.“1+2”->(+12) 我读入“+”并将其转换为如下符号: (def plus (symbol "clojure.core" "+")) 它似乎工作正常,但当我调用它时,我没有得到我所期望的: user=> plus + user=> (plus 1 1) 1 user=> (plus 1 2) 2 user=> (plus 1 2 3) Arity
(def plus (symbol "clojure.core" "+"))
它似乎工作正常,但当我调用它时,我没有得到我所期望的:
user=> plus
+
user=> (plus 1 1)
1
user=> (plus 1 2)
2
user=> (plus 1 2 3)
ArityException Wrong number of args (3) passed to: Symbol clojure.lang.AFn.throwArity (AFn.java:437)
我在这里遗漏了什么?您编写此类代码的原因是什么?如果您想让函数名为
plus
,它将是+
同义词,只需编写(def plus+)
Clojure+
是正常功能。您可以像(+123445)
一样使用它。没有理由把它变成符号
Clojure根本没有操作员。只有函数和宏
不过,如果您坚持使用符号
,您需要像这样评估它
(def plus(eval(符号“clojure.core/+”))
看看(符号“clojure.core/+”)
类和+
本身
(类(符号“clojure.core/+”);;clojure.lang.Symbol
(class+);;clojure.core$\u PLUS
符号本身不能作为“在此符号下”的函数调用。如果您想“将符号转换为可调用函数”,您必须对其进行求值。您编写此类代码的原因是什么?如果您想让函数名为
plus
,它将是+
同义词,只需编写(def plus+)
Clojure+
是正常功能。您可以像(+123445)
一样使用它。没有理由把它变成符号
Clojure根本没有操作员。只有函数和宏
不过,如果您坚持使用符号
,您需要像这样评估它
(def plus(eval(符号“clojure.core/+”))
看看(符号“clojure.core/+”)
类和+
本身
(类(符号“clojure.core/+”);;clojure.lang.Symbol
(class+);;clojure.core$\u PLUS
符号本身不能作为“在此符号下”的函数调用。如果您想“将符号转换为可调用函数”,您必须对其进行求值。您编写此类代码的原因是什么?如果您想让函数名为
plus
,它将是+
同义词,只需编写(def plus+)
Clojure+
是正常功能。您可以像(+123445)
一样使用它。没有理由把它变成符号
Clojure根本没有操作员。只有函数和宏
不过,如果您坚持使用符号
,您需要像这样评估它
(def plus(eval(符号“clojure.core/+”))
看看(符号“clojure.core/+”)
类和+
本身
(类(符号“clojure.core/+”);;clojure.lang.Symbol
(class+);;clojure.core$\u PLUS
符号本身不能作为“在此符号下”的函数调用。如果您想“将符号转换为可调用函数”,您必须对其进行求值。您编写此类代码的原因是什么?如果您想让函数名为
plus
,它将是+
同义词,只需编写(def plus+)
Clojure+
是正常功能。您可以像(+123445)
一样使用它。没有理由把它变成符号
Clojure根本没有操作员。只有函数和宏
不过,如果您坚持使用符号
,您需要像这样评估它
(def plus(eval(符号“clojure.core/+”))
看看(符号“clojure.core/+”)
类和+
本身
(类(符号“clojure.core/+”);;clojure.lang.Symbol
(class+);;clojure.core$\u PLUS
符号本身不能作为“在此符号下”的函数调用。如果您想“将符号转换为可调用函数”,您必须对其进行求值。默认情况下,符号会附加一个函数。默认情况下附加到它们的功能是在地图中查找此键。这就是你的加号行为异常的原因。它正在尝试查找地图中的元素
(加上11)
这实际上是在地图1中查找符号+并返回默认值1
(加上12)
除默认值为2外,与上述相同
默认情况下,符号具有附加的功能。默认情况下附加到它们的功能是在地图中查找此键。这就是你的加号行为异常的原因。它正在尝试查找地图中的元素
(加上11)
这实际上是在地图1中查找符号+并返回默认值1
(加上12)
除默认值为2外,与上述相同
默认情况下,符号具有附加的功能。默认情况下附加到它们的功能是在地图中查找此键。这就是你的加号行为异常的原因。它正在尝试查找地图中的元素
(加上11)
这实际上是在地图1中查找符号+并返回默认值1
(加上12)
除默认值为2外,与上述相同
默认情况下,符号具有附加的功能。默认情况下附加到它们的功能是在地图中查找此键。这就是你的加号行为异常的原因。它正在尝试查找地图中的元素
(加上11)
这实际上是在地图1中查找符号+并返回默认值1
(加上12)
除默认值为2外,与上述相同
@yonki原因是“+”是原始表达式中的字符串。这只是为了更好地学习这门语言的练习。重点不是把东西加在一起,