REPL中的Java-Clojure互操作:'require versus'导入Java类

时间:2013-06-12 19:53:33

标签: java clojure interop

这个问题涉及clatrix Clojure库[1]以及jblas Java库[2](前者部分包装后者)。

我通过clatrix目录中的lein repl启动Clojure REPL,其project.clj指定对org.jblas的依赖关系。 (这是clatrix与我的问题相关的程度。)

我能够import jblas'课程,但我想改为require

user> (import '[org.jblas DoubleMatrix Solve])
org.jblas.Solve

user> (. Solve solveLeastSquares (. DoubleMatrix rand 2 2) (. DoubleMatrix rand 2 1))
#<DoubleMatrix [1.965810; -1.044592]>

user> (require '[org.jblas Solve])
FileNotFoundException Could not locate org/jblas/Solve__init.class or org/jblas/Solve.clj on classpath:   clojure.lang.RT.load (RT.java:432)

我可以只require Clojure库而不是Java库吗?我是否出现了标点符号错误?

理由:如果我可以org.jblas.Solverequire d并且别名,例如S(仅作为示例),我可以简单地执行(S/solveLeastSquares foo bar)我发现它比点空间符号更好。此外,斜杠符号在clatrix的源代码中使用,并且在使用REPL进行试验以便于复制粘贴时也可以使用它。

[1]见https://github.com/tel/clatrix [2]特别是Solve类:https://github.com/mikiobraun/jblas/blob/master/src/main/java/org/jblas/Solve.java#L44

1 个答案:

答案 0 :(得分:4)

要求和导入具有非重叠用途:

  • 仅适用于Clojure名称空间。
  • import仅适用于java类

我认为目前没有办法为java包添加别名,你可以做的最好的事情就是像使用Solve一样导入它以避免输入包名。您不能使用import,为其指定不同的包名称。