2024年Clojure状态调查中分享您的想法!

欢迎!请查看关于页面以了解更多关于如何使用本网站的信息。

0
Clojure
封闭

当我以为我掌握了clojure/java互操作性时,我却遇到了
困难!

我想使用一些Java代码,jkahypar

它在Maven中有很好的注册,我在我的projects.clj文件中有一个引用

[fr.cril/jkahypar "0.2.0"]

我可以导入我开始的特定工具

(import fr.univartois.cril.jkahypar.tools.HypergraphParser)
=> fr.univartois.cril.jkahypar.tools.HypergraphParser

(type HypergraphParser)
=> java.lang.Class

但我做不到的是调用类构造方法之一,
使用String或InputStream作为数据文件路径

(def tf ".../graphs/add20.metis")

(def fs (clojure.java.io/input-stream tf))
(type fs)
=> java.io.BufferedInputStream
	

(def hgp (HypergraphParser/HypergraphParser tf))

Syntax error (IllegalArgumentException) compiling . at (/private/var/folders/dz/8plg36qs1r50kjb6wvn4dwh00000gn/T/form-init7854241673144140259.clj:1:10).
No matching method HypergraphParser found taking 1 args for class fr.univartois.cril.jkahypar.tools.HypergraphParser

(def hgp (HypergraphParser/HypergraphParser fs))

Syntax error (IllegalArgumentException) compiling . at (/private/var/folders/dz/8plg36qs1r50kjb6wvn4dwh00000gn/T/form-init7854241673144140259.clj:1:10).
No matching method HypergraphParser found taking 1 args for class fr.univartois.cril.jkahypar.tools.HypergraphParser

我试了各种变体,但似乎都没有
奏效。

有没有办法“反射”(?)这个类上可用的方法,让我知道哪里出了问题?我习惯了在使用Cursive IDE时出现提示(例如,它知道HypergraphParser),但是我在这个类后面输入斜杠/时却没有出现任何提示?

有什么建议吗,请指教?

编上注解: 已解决

1 条回答

+1 点赞
by
已选择 by
 
最佳答案

构造函数调用:(HypergraphParser. tf)

您尝试使用(ClassName/ClassName arg),因此Clojure正在类ClassName内查找名为ClassName的(静态)方法。

by
就这样,非常感谢Sean!现在我发现文档中提到了尾随点和构造函数的(新)特殊形式;现在我明白了。
...