我的简单Clojure gen-class脚本有什么问题?

4

我正在尝试学习如何在Clojure中使用gen-class。我从这个简单的脚本开始:

(gen-class :name MyClass :prefix MyClass-)

(defn MyClass-toString[this] "This Is My Class")

(println (MyClass.))

当我尝试运行它时,会出现以下问题:
    Exception in thread "main" java.lang.IllegalArgumentException: Unable to resolve classname: MyClass

我做错了什么?

2个回答

3

搞定了!我把类放在一个单独的文件中,并对该文件调用“编译”,现在它可以正常工作了。 - Idan Arye

1

编辑,同时检查主类名是否与lein项目文件中定义的名称匹配。

通常将其放在clj文件的(ns)头部。

(ns my.namespace
  (:gen-class))

以下是一些例子

(gen-class
    :name "some.package.RefMap"
    :implements [java.util.Map]
    :state "state"
    :init "init"
    :constructors {[] []}
    :prefix "ref-map-")

我正在尝试在默认命名空间中使用clj运行此脚本,而不是使用Leiningen。我无法在lein项目中让gen-class正常工作,因此我正在尝试运行可能最简单的东西——一个类,没有命名空间,没有状态,没有继承。这与我要运行的主类没有任何关系——因为主类的名称不是MyClass,我也不是要运行名为MyClass的类(只是构造它)——这就是异常所说的类。 - Idan Arye
无论是否使用 lein,请检查类名是否与文件名.clj匹配。只需记得将“-”替换为“_”。 - runexec
另外,请参考 http://clojuredocs.org/clojure_core/clojure.core/gen-class 上的示例。 - runexec

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接