Clojure中(3)和3之间的差异

jav*_*guy 1 clojure code-snippets

我是新手.是什么区别(?3?),只是3?如果我这样做,?(3)我得到这个例外:

java.lang.ClassCastException:java.lang.Long无法强制转换为clojure.lang.IFn.

muh*_*huk 11

  • 3 是字面数字3.
  • (3)是一个功能应用程序,你试图调用3没有参数的函数.(没有这样的功能,似乎你无法定义它.)
  • '(3)是一个项目的列表,3.它与(list 3)功能应用程序相同.

这是一个repl会话:

repl=> 3
3
repl=> (3)
ClassCastException java.lang.Long cannot be cast to clojure.lang.IFn  repl/eval1388 (NO_SOURCE_FILE:1)
repl=> '(3)
(3)
repl=> (list 3)
(3)
repl=> => (defn 3 [] 3)
ClassCastException java.lang.Long cannot be cast to clojure.lang.IObj  clojure.core/with-meta (core.clj:211)
Run Code Online (Sandbox Code Playgroud)


sou*_*eck 8

在lisps括号中表示函数应用,所以这个:

(a b c d)
Run Code Online (Sandbox Code Playgroud)

意味着适用a于论点b c d

您正在尝试应用3,这不是一个功能,也不能转换为一个功能.

  • 如果你想要的是一个包含3作为唯一元素的列表,你需要引用它:`'(3)` (5认同)

Gre*_*ill 6

在Clojure中,括号表示功能应用.(3)试图调用一个名为的函数3,该函数不存在.