代码之家  ›  专栏  ›  技术社区  ›  Nick

如何将GEVA集成到Clojure中

  •  2
  • Nick  · 技术社区  · 15 年前

    我同时进入了Clojure和语法的进化,并发现 GEVA

    我可以使用以下命令从CLI执行默认脚本: java-jarGEVA.jar公司-主要课程主。快跑

    GEVA源目录具有以下子目录,其中包含以该目录命名的包:

    主子目录包含以下文件和教程子目录: 抽象运行.java实验.java运行.java状态.java教程

    下列课程在运行.java文件: 公共类Run扩展了AbstractRun 公共运行() public void实验(String[]args) 专用空设置速度() public static void main(字符串[]args)

    据我所知,类中的静态方法'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)
    

    我到底做错什么了?我肯定我只是错过了一些明显的东西,但我已经撞了我的头有一段时间了,需要一些方向。谢谢。

    3 回复  |  直到 15 年前
        1
  •  1
  •   dreish    15 年前

    调用没有参数的静态方法(我将使用每个人都可以访问的示例)的语法是:

    => (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)
    
        2
  •  2
  •   Joubert Nel    15 年前

    首先,确保正确加载GEVA库-请参阅 http://clojure.org/libs

    然后您想看看Clojure的Java互操作文档: http://clojure.org/java_interop

        3
  •  1
  •   levand    15 年前

    clgeva.test=> (.Main.Run/main)
    

    在点运算符和Main.Run/Main参考文献。事实上,它正试图找到一种叫做“爱”的东西。主。快跑“这显然不存在。这样做:

    clgeva.test=> (. Main.Run/main)
    

    假设类路径设置正确,它应该可以工作。

    使用导入类 (import ...) 打电话来 (main) main 是静态方法。

    推荐文章