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

欢迎!请查看关于页面,了解更多这方面的信息。

0
Clojure
已关闭

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

我想要使用一些Java代码,jkahypar

它在Maven中注册得很好,我在projects.clj中也有一个slug

[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

我已经尝试了很多这个别的变体,但似乎都没有用。
有什么办法可以获取(this类上的方法("reflect")?)让我知道哪里出了问题?我习惯于使用我的Cursive IDE弹出提示(例如,告诉我它知道HypergraphParser),但是当我在这个类后面类型斜杠(/)时,我没有收到任何提示?

请问我在哪里做错了,请指教?

请有何高见?

已关闭,备注:已解决

1 个答案

+1

已选择
 
最佳答案

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

您正在尝试 (ClassName/ClassName arg),因此Clojure正在查找类 ClassName 中的(静态)方法 ClassName.

就这样,非常感谢Sean!现在我发现文档提到了关于尾部点和构造函数的(新)特殊形式;现在我不是盲目的了。
...