簡體   English   中英

REPL中的Java-Clojure互操作:'require versus'導入Java類

[英]Java-Clojure interop in REPL: 'require versus 'import a Java class

這個問題涉及clatrix Clojure庫[1]以及jblas Java庫[2](前者部分包含后者)。

我通過lein repl目錄中的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

要求和導入具有非重疊用途:

  • 要求僅適用於Clojure名稱空間。
  • import僅適用於java類

我不認為目前有一種方法可以為java包添加別名,你可以做的最好的事情就是像使用Solve那樣導入它,以避免輸入包名。 您不能使用import,為其指定不同的包名稱。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM