0
我有两个有点关系的问题,通过以下所示:行为
user=> (if (symbol? 5) (meta (var 5)) 5)
CompilerException java.lang.ClassCastException: java.lang.Long cannot be cast to clojure.lang.Symbol, compiling:(NO_SOURCE_PATH:6)
user=> (defn dometa [x] (if (symbol? x) (meta (var x)) x))
CompilerException java.lang.RuntimeException: Unable to resolve var: x in this context, compiling:(NO_SOURCE_PATH:7)
user=>
在第一种情况下,因为5是不是一个符号我不希望(meta (var 5))
进行评估,但它是(或者至少这是我看来的方式)。
在第二种情况下,如果我想将第一个表达式放入一个函数中,并对正在测试的值进行参数化,则(var ...)函数不再起作用。
'var'不是函数,它是一种特殊的形式。 – mtyaka