2013-06-12 2 views
4

Этот вопрос включает библиотеку Clatrix Clojure [1], а также библиотеку jblas Java [2] (первая частично обертывает последнюю).Java-Clojure interop в REPL: 'require versus' импортирует класс Java

Я запускаю Clojure REPL через lein repl в каталоге clatrix, чья project.clj определяет зависимость от org.jblas. (Это степень важности клатриса для моего вопроса.)

Я умею 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) 

Can I только require библиотеки Clojure, а не Java из них? Я делаю ошибку пунктуации?

Обоснование: если бы я мог получить org.jblas.Solve быть require d и псевдонимами, скажем, S (только в качестве примера), я мог бы просто сделать (S/solveLeastSquares foo bar), которые я нахожу лучше, чем точка пространства нотации. Кроме того, нотация косой черты используется по всему исходному коду клатрикса, и было бы неплохо использовать это также при экспериментировании в REPL для облегчения копирования-вставки.

[1] См https://github.com/tel/clatrix [2] Особенно его Solve класс: https://github.com/mikiobraun/jblas/blob/master/src/main/java/org/jblas/Solve.java#L44

+0

Эквивалентный и более сжатый вызов для решения: «(Решить/решитьLeastSquares foo bar)». –

ответ

4

Require и импорта иметь не перекрывающихся использует:

  • Требуется только для Clojure пространств имен.
  • импорт только для классов ява

Я не думаю, что есть способ псевдоним пакета Java на данный момент, лучшее, что вы можете сделать, это импортировать его, как вы делаете с Решите, чтобы избежать повторного ввода имя пакета. Вы не можете использовать импорт, присваиваете ему другое имя пакета.

+0

Я понимаю. Даже глядя на источник clatrix (https://github.com/tel/clatrix/blob/master/src/clatrix/core.clj#L7), я вижу, что классы Java являются 'import'ed, а не' require'd , –

Смежные вопросы