2017-05-24 45 views
2

工作这是我myns名字/ junk.clj文件Clojure的:创一流的不是Java应用程序

(ns myns.junk 
    (:gen-class 
    :name booklist.util 
    :methods [[sq [int] int]])) 

(defn sq [x] (* x x)) 

我跑lein ubserjar没有问题。我已经导入生成的JAR在我的Java应用程序,然后运行这个

package javaapplication1; 

import booklist.util; 

public class JavaApplication1 { 
    public static void main(String[] args) { 
     util u = new util(); 
     System.out.println(u.sq(45)); 
    } 
} 

产生错误

异常线程 “main” java.lang.UnsupportedOperationException:□(myns.junk/-sq未定义?) at booklist.util.sq(Unknown Source) at javaapplication1.JavaApplication1.main(JavaApplication1.java:14) C:\ Users \ X750JA \ AppData \ Local \ NetBeans \ Cache \ 8.2 \ executor -snippets \ run.xml:53:Java返回:1 BUILD FAILED(总时间:0秒)

我错过了什么,理想情况下,是否有任何类型的文档可用于详细解释这些内容?


编辑,每亚历杭德罗的答案,我想这

(ns myns.junk 
    (:gen-class 
    :name booklist.util 
    :methods [[sq [int] int]])) 

(defn sq [x] (* x x)) 

(defn -sq 
    "A Java-callable wrapper around the 'sq' function." 
    [n] 
    (sq n)) 

现在产生错误

异常线程 “main” clojure.lang.ArityException:ARGS数目错误( 2)传递到:junk/-sq at clojure.lang.AFn.throwArity(AFn.java:429) at clojure.lang.AFn.invoke(AFn.java:36) at booklist.util.sq(Unknown来源) at javaapplication1.JavaApplication1.main(JavaApplication1.java:14) C:\ Users \ X750JA \ AppData \ Local \ NetBeans \ Cache \ 8.2 \ executor-snippets \ run.xml:53:Java返回:1 BUILD FAILED(总时间:0秒)


我伤口什么样的主意是这样的

(ns myns.junk 
    (:gen-class 
    :name booklist.util 
    :methods [#^{:static true} [sq [int] int]])) 

(defn -sq [x] (* x x)) 

(-sq 7) ; works - 49 

所以看起来我需要声明的方法为静态,并定义实际的方法来取得领先冲着名字。

回答

2

你错过了这样的事情在你的Clojure文件

(defn -sq 
    "A Java-callable wrapper around the 'sq' function." 
    [n] 
    (sq n)) 

此外,你需要定义方法是静态的。

我认为规范的文档是在这里:https://clojure.org/reference/compilation

+0

感谢您的答复 - 我更新了我与尝试的问题 - 它似乎仍然Java的不喜欢:( –

+0

@AdamRackis我认为它实际上应该是一个静态方法 –