2010-08-24 7 views
10

C'est juste une question stupide que j'ai eu ce matin: Pouvons-nous utiliser des classes Scala de clojure?Scala classes dans clojure

Parce que si la réponse est oui, je vais apprendre definetly Clojure de

+1

Pourquoi l'étiquette scala-2.8? Y a-t-il quelque chose de spécifique à cette version? –

Répondre

17

classes Scala sont des classes Java et vous pouvez utiliser des classes Java à partir Clojure assez facilement.

Amusez-vous à apprendre Clojure. :-)

+1

Et les classes Cloujre (créées en utilisant 'gen-class' et' deftype/defrecord') peuvent aussi être utilisées depuis Scala. C'est tout le bytecode en dessous. –

+0

Le problème est que les méthodes Scala ont des noms laids et verbeux en Java ("+" devient $ plus ...), est-ce la même chose avec Clojure? – Aymen

+2

Malheureusement, oui. Comme 'blank?' Devient 'blank_QMARK'. C'est parce que Java (ou JVM?) Ne supporte pas de tels caractères dans les identifiants. –

10

Scala classes, oui. Scala singleton objets, avec la même année signature de Java. Traits Scala, non. Scala implicite, hé, tu plaisantes! Ainsi, l'expérience peut aller de «ok», si ce n'est que vos cours, à très désagréable, dans le cas des collections Scala, par exemple.

+4

Je ne connais pas les implicits, mais les traits sont des interfaces, éventuellement associées à des classes auxiliaires. Daniel Spiewak a [un bel article] (http://www.codecommit.com/blog/java/interop-between-java-and-scala) sur Scala/Java interop, y compris une section sur l'utilisation des traits de Java; à en juger par cela, il devient fastidieux pour les traits qui ne sont pas "purement abstrait", mais dans Clojure, une grande partie de cet ennui - peut-être presque tout - peut être abstraite avec des macros. –

2

faut dire que les classes Scala qui prennent des paramètres de fonction, tels que:

Option.map(f : A => B) 

sont peu susceptibles d'être très utilisable de Clojure, car le compilateur Clojure ne tourne pas Clojure lambdas en cas de scala.FunctionN. Je suis avec Daniel - je pense que l'interop sera pauvre.

+2

Je suis assez sûr que vous pourriez utiliser des macros pour résoudre le problème de convivialité - essentiellement obtenir la macro pour envelopper le lambda Clojure dans un scala.functionN? – mikera

Questions connexes