无法从Clojure调用实例方法。

时间:2013-02-12 18:01:14

标签: java clojure leiningen clojure-java-interop

我对Java和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 --- >

我在这里做错了什么?

1 个答案:

答案 0 :(得分:1)

也许你错过了clojure程序中的import语句?