我同时进入Clojure和Grammatical Evolution并发现了GEVA,这是一个用Java编写的GE工具。我没有Java背景。所以我不必重新发明轮子,我怎样才能将GEVA整合到Clojure中?
我可以使用以下命令从CLI执行默认脚本: java -jar GEVA.jar -main_class Main.Run
GEVA源目录包含以下子目录,其中包以目录命名: 算法com例外FitnessEvaluation分形个体主映射运算符参数UI Util
Main子目录包含以下文件和教程子目录: AbstractRun.java Experiment.java Run.java State.java教程
以下类位于Run.java文件中: 公共类Run扩展AbstractRun public Run() public void experiment(String [] args) public void setup(String [] args) private void setSeed() public static void main(String [] args)
据我所知,Main.Run类中的静态方法'main'是我想要执行的。但是,当我尝试遵循Java互操作指令时,我遇到了错误。
clgeva.test=> (.Main.Run/main)
java.lang.Exception: No such namespace: .Main.Run (NO_SOURCE_FILE:5)
clgeva.test=> (.Main.Run/main "")
java.lang.Exception: No such namespace: .Main.Run (NO_SOURCE_FILE:6)
我显然没有正确导入命名空间来运行main函数。
user=> (import Main)
java.lang.ClassNotFoundException: Main (NO_SOURCE_FILE:1)
user=> (import Main.Run)
Main.Run
user=> (main)
java.lang.Exception: Unable to resolve symbol: main in this context (NO_SOURCE_FILE:3)
user=> (.Main.Run/main)
java.lang.Exception: No such namespace: .Main.Run (NO_SOURCE_FILE:4)
我到底做错了什么?我确信我只是遗漏了一些显而易见的东西,但我一直在敲打它一段时间并需要一些方向。感谢。
答案 0 :(得分:2)
首先,确保正确加载GEVA库 - 请参阅http://clojure.org/libs 我猜测,从java.lang.ClassNotFoundException错误,GEVA不在你的类路径上。
然后,您想查看Java interop的Clojure文档:http://clojure.org/java_interop
答案 1 :(得分:1)
你有正确的想法,但确实有一些语法错误。
clgeva.test=> (.Main.Run/main)
点运算符和Main.Run / main引用之间应该有一个空格。事实上,它试图找到一种名为“.Main.Run”的东西,它显然不存在。这样做:
clgeva.test=> (. Main.Run/main)
假设您正确设置了类路径,它应该可以正常工作。
使用(import ...)
导入课程并调用(main)
将无效,因为main
是一种静态方法。
答案 2 :(得分:1)
调用不带参数的静态方法的语法(我将使用每个人都有权访问的示例):
=> (java.lang.System/currentTimeMillis)
1284574337322
以上形式是首选,但以下也是可能的,并且可用于宏:
=> (. java.lang.System currentTimeMillis)
1284574477369
在这种情况下,“java.lang”。可能会被省略,但我会把它包括在内以便更贴近您的情况。
=> (System/currentTimeMillis)
1284574617771
无论是否有空格,在第一个表单上添加一个点都不起作用:
user=> (.System/currentTimeMillis)
java.lang.Exception: No such namespace: .System (NO_SOURCE_FILE:44)
user=> (. System/currentTimeMillis)
java.lang.IllegalArgumentException: Malformed member expression, expecting (. target member ...) (NO_SOURCE_FILE:45)