2010-08-24 18 views
10

To tylko głupie pytanie, które miałem dziś rano: Czy możemy używać klas Scala z clojure?Klasy Scala w clojure

Bo jeśli odpowiedź brzmi tak, to będę na pewno nauczyć

+1

Dlaczego tag scala-2.8? Czy jest coś konkretnego dla tej wersji? –

Odpowiedz

17

klas Scala Clojure ^^ są klasami Java i można korzystać z klas Java z Clojure całkiem wygodnie.

Baw się dobrze przy nauce Clojure. :-)

+1

Klasy Cloujre (utworzone za pomocą 'gen-class' i' deftype/defrecord') mogą być również używane w Scali. Pod spodem znajduje się cały kod bajtowy. –

+0

Problem polega na tym, że metody Scala mają brzydkie i pełne nazw w Javie ("+" staje się $ plus ...), czy to samo z Clojure? – Aymen

+2

Niestety tak. Jak "puste" staje się "puste_QMARK". Jest tak dlatego, że Java (lub JVM?) Nie obsługuje takich znaków w identyfikatorach. –

10

Klasy Scala, tak. Scala obiekty singleton, z tym samym rokiem podpisu jak z Javy. Cechy Scala, nie. Scala implikuje, ha, jesteś żart!

Doświadczenie może się zatem wahać od "ok", jeśli chodzi tylko o zajęcia, do bardzo nieprzyjemnych, na przykład w przypadku kolekcji Scala.

+4

Nie wiem na temat implicite, ale cechy to interfejsy, prawdopodobnie połączone z klasami pomocniczymi. Daniel Spiewak ma [fajny zapis] (http://www.codecommit.com/blog/java/interop-between-java-and-scala) na współdziałaniu Scala/Java, w tym rozdział dotyczący używania cech z Javy; sądząc z tego, staje się nudny dla cech, które nie są "czysto abstrakcyjne", ale w Clojure wiele z tego nudy - być może prawie wszystkich - można było usunąć za pomocą makr. –

2

warto powiedzieć, że klasy Scala, które przyjmują parametry funkcji, takich jak:

Option.map(f : A => B) 

Czy mało prawdopodobne, aby być bardzo użyteczny z Clojure, ponieważ kompilator Clojure nie włączy lambdy Clojure do wystąpień scala.FunctionN. Jestem z Danielem - myślę, że współpraca będzie niska.

+2

Jestem prawie pewien, że możesz użyć makr, aby rozwiązać problem z użytecznością - po prostu pobierz makro, aby owinąć Clojure lambda w scala.functionN? – mikera