2012-08-13 45 views
13

我很熟悉scala類/對象可以從clojure中調用,因爲scala編譯爲字節碼,並且clojure很適應它。clojure和scala interop

然而,它是無痛的調用clojure函數,並從scala中導入命名空間?

我想混合優秀的電梯框架和clojure,基本上調用電梯clojure代碼。

+0

我知道人們已經爲JRuby-Clojure和JRuby-Scala編寫了橋樑,如果有人還沒有完成Clojure-Scala,我會非常驚訝。 – 2012-08-13 13:04:01

回答

12

Scala中的導入語義與Java基本相同。您應該能夠通過閱讀如何從Java調用Clojure代碼來獲取所需的信息,然後在Scala中應用相同的原則。

如果你想編譯的Clojure代碼,並將其包含在類路徑中一個JAR那麼這個帖子應該是相關的:

Calling Clojure from Java

如果你寧願動態編譯/解釋.clj文件那麼你應該閱讀:

Clojure Programming: Invoking Clojure from Java

第一個選項似乎更好對我很重要。

+2

+1,但我認爲第二個選項真的值得考慮。這是更「動態」的選擇,如果您將Clojure用作一種嵌入式腳本語言,該選項非常有用。它避免了預編譯Clojure類的需要。 – mikera 2012-08-13 06:57:04

+0

在scala中使用'var'有一個小問題 - 你需要在它周圍加反引號。前一段時間我需要互操作並創建了這個包裝:https://gist.github.com/HairyFotr/4995607 – HairyFotr 2013-02-20 13:46:27

0

FWIW,我最近有過類似的經歷。在clojure代碼庫中使用scala庫並不總是直截了當的。如果圖書館的作者在設計api時一直關注無斯卡拉消費者,那麼整合可能是微不足道的。如果沒有,你可能不得不學習你嘗試使用的scala庫生成的java接口的細節。

我最近寫了一篇關於這個確切主題的文檔(https://github.com/grandbora/clojure-scala-cantrips#clojure-scala-cantrips),並且有一些clojure庫提供了用於消費scala庫的糖語法。