在普通的 lisp 中,我可以这样做:
src-> (defmacro 宏-hello() `"hello")
(eval '(宏你好))
没问题。
在 Clojure 中:
(defmacro 宏你好 [] `"你好")
(eval '(宏你好))
给我一个错误。我做错了什么吗?
Clojure 错误:
线程“主”java.lang.Exception 中的异常:无法解析符号:clojure.lang.Compiler.analyze(Compiler.java:4340) 在 clojure.lang.Compiler 的此上下文中的宏问候 (NO_SOURCE_FILE:12)。 clojure.lang.Compiler$InvokeExpr.parse(Compiler.java:2767) 的分析(Compiler.java:4286) clojure.lang.Compiler.analyzeSeq(Compiler.java:4498) 的 clojure.lang.Compiler.analyze(Compiler .java:4325) 在 clojure.lang.Compiler.analyze(Compiler.java:4286) 在 clojure.lang.Compiler$BodyExpr$Parser.parse(Compiler.java:3862) 在 clojure.lang.Compiler$FnMethod.parse( Compiler.java:3697) 在 clojure.lang.Compiler$FnMethod.access$1100(Compiler.java:3574) 在 clojure.lang.Compiler$FnExpr.parse(Compiler.java:2963) 在 clojure.lang.Compiler.analyzeSeq(编译器.java:4494) at clojure.lang.Compiler.analyze(Compiler.java:4325) at clojure.lang.Compiler.eval(Compiler.java:4530) at clojure.core$eval__3990.invoke(core.clj:1728) at com. yourcompany.defpackage$_main__4.invoke(defpackage.clj:12) at clojure.lang.AFn.applyToHelper(AFn.java:171) at clojure.lang.AFn.applyTo(AFn.java:164) at com.yourcompany.defpackage .main(未知来源)引起:java.lang.Exception:无法解析符号:在clojure.lang.Compiler.resolveIn(Compiler.java:4682)的clojure.lang.Compiler.resolve( Compiler.java:4628) at clojure.lang.Compiler.analyzeSymbol(Compiler.java:4605) at clojure.lang.Compiler.analyze(Compiler.java:4307) ... 还有 17 个 Java 结果:14325) at clojure.lang.Compiler.eval(Compiler.java:4530) at clojure.core$eval__3990.invoke(core.clj:1728) at com.yourcompany.defpackage$_main__4.invoke(defpackage.clj:12) at clojure.lang.AFn.applyToHelper(AFn.java:171) at clojure.lang.AFn.applyTo(AFn.java:164) at com.yourcompany.defpackage.main(Unknown Source) 原因:java.lang.Exception:无法解析符号:在 clojure.lang.Compiler.resolveIn(Compiler.java:4682) 在 clojure.lang.Compiler.resolve(Compiler.java:4628) 在 clojure.lang.Compiler.analyzeSymbol( Compiler.java:4605) at clojure.lang.Compiler.analyze(Compiler.java:4307) ... 还有 17 个 Java 结果:14325) at clojure.lang.Compiler.eval(Compiler.java:4530) at clojure.core$eval__3990.invoke(core.clj:1728) at com.yourcompany.defpackage$_main__4.invoke(defpackage.clj:12) at clojure.lang.AFn.applyToHelper(AFn.java:171) at clojure.lang.AFn.applyTo(AFn.java:164) at com.yourcompany.defpackage.main(Unknown Source) 原因:java.lang.Exception:无法解析符号:在 clojure.lang.Compiler.resolveIn(Compiler.java:4682) 在 clojure.lang.Compiler.resolve(Compiler.java:4628) 在 clojure.lang.Compiler.analyzeSymbol( Compiler.java:4605) at clojure.lang.Compiler.analyze(Compiler.java:4307) ... 还有 17 个 Java 结果:1yourcompany.defpackage$_main__4.invoke(defpackage.clj:12) at clojure.lang.AFn.applyToHelper(AFn.java:171) at clojure.lang.AFn.applyTo(AFn.java:164) at com.yourcompany.defpackage .main(未知来源)引起:java.lang.Exception:无法解析符号:在clojure.lang.Compiler.resolveIn(Compiler.java:4682)的clojure.lang.Compiler.resolve( Compiler.java:4628) at clojure.lang.Compiler.analyzeSymbol(Compiler.java:4605) at clojure.lang.Compiler.analyze(Compiler.java:4307) ... 还有 17 个 Java 结果:1yourcompany.defpackage$_main__4.invoke(defpackage.clj:12) at clojure.lang.AFn.applyToHelper(AFn.java:171) at clojure.lang.AFn.applyTo(AFn.java:164) at com.yourcompany.defpackage .main(未知来源)引起:java.lang.Exception:无法解析符号:在clojure.lang.Compiler.resolveIn(Compiler.java:4682)的clojure.lang.Compiler.resolve( Compiler.java:4628) at clojure.lang.Compiler.analyzeSymbol(Compiler.java:4605) at clojure.lang.Compiler.analyze(Compiler.java:4307) ... 还有 17 个 Java 结果:1无法解析符号:在 clojure.lang.Compiler.resolveIn(Compiler.java:4682) 在 clojure.lang.Compiler.resolve(Compiler.java:4628) 在 clojure.lang.Compiler.analyzeSymbol( Compiler.java:4605) at clojure.lang.Compiler.analyze(Compiler.java:4307) ... 还有 17 个 Java 结果:1无法解析符号:在 clojure.lang.Compiler.resolveIn(Compiler.java:4682) 在 clojure.lang.Compiler.resolve(Compiler.java:4628) 在 clojure.lang.Compiler.analyzeSymbol( Compiler.java:4605) at clojure.lang.Compiler.analyze(Compiler.java:4307) ... 还有 17 个 Java 结果:1
[编辑]:添加结束双引号