这个问题涉及到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.Solve
改为require
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
Require和import的用法不重叠:
- Require只适用于Clojure命名空间
- import只适用于java类
我不认为有一种方法来别名一个java包的时刻,你能做的最好的是导入它,因为你正在做的解决,以避免输入包的名称。你不能使用import,给它一个不同的包名。