2
我完全不熟悉Java和clojure。但以往在共同的lisp方面的经验,我想我会试试clojure。我无法弄清楚一些非常基本的东西。无法从Clojure调用实例方法。
这是实际的Java代码。
import syntaxtree.*;
import visitor.*;
public class Main {
public static void main(String [] args) {
try {
Node root = new MicroJavaParser(System.in).Goal();
System.out.println("Program parsed successfully");
}
catch (ParseException e) {
System.out.println(e.toString());
}
}
}
当我运行此代码时,结果如预期。
└──╼ java Main < ../input/Factorial.java
Program parsed successfully
在Clojure中我尝试这样做:
(ns clj-assign2.core)
(defn -main
[]
(def root
(.Goal
(MicroJavaParser. (. System in))))
(println "Successfully parsed"))
但是这段代码运行时,以下异常引发:
└──╼ lein run < ../assign2/input/Factorial.java
Exception in thread "main" java.lang.IllegalArgumentException: No matching field found: Goal for class MicroJavaParser
at clojure.lang.Reflector.getInstanceField(Reflector.java:271)
at clojure.lang.Reflector.invokeNoArgInstanceMember(Reflector.java:300)
at clj_assign2.core$_main.invoke(core.clj:7)
< --- snipped --- >
我在做什么错在这里?
目标方法的签名是什么? – user100464 2013-02-12 18:47:56
目标方法的可见性是什么? – Alex 2013-02-12 19:16:46
无法从您发布的内容中分辨出来。也许,目标是可变的,这可能会导致这种情况。尝试使用反射在MicroJavaParser中打印出所有方法,尝试打印出getClass的输出。或者试着让它在java.lang中的类上工作,以便其他人可以尝试你的代码。顺便说一句,在这样的defn中使用def通常不是一个好主意! – 2013-02-13 10:51:36