我正在查看一些4Clojure问题,并用我的一些代码遇到了一些奇怪的行为.经过进一步调查,似乎罪魁祸首是使用报价宏vs列表功能.为什么这在下面的代码中很重要,为什么会产生错误的结果?
user=> (= (class '(/ 1 2)) (class (list / 1 2)))
true
user=> (def a '(/ 1 2))
#'user/a
user=> (def b (list / 1 2))
#'user/b
user=> (class a)
clojure.lang.PersistentList
user=> (class b)
clojure.lang.PersistentList
user=> (apply (first a) (rest a))
2
user=> (apply (first b) (rest b))
1/2
user=> (class (first a))
clojure.lang.Symbol
user=> (class (first b))
clojure.core$_SLASH_
Run Code Online (Sandbox Code Playgroud)
'(/ 1 2)
Run Code Online (Sandbox Code Playgroud)
类似于:
(list '/ 1 2)
Run Code Online (Sandbox Code Playgroud)
当你不引用时/,你得到它的值,这是内置的除法函数,而不是符号.
| 归档时间: |
|
| 查看次数: |
119 次 |
| 最近记录: |