2013-01-22 11 views
6

私は をClojure ISeqとして使用したいと思っているScalaクラス(Lift's Box、Scala's Optionなど)の束を持っています。ClojureクラスからのClojure ISeq

これらのクラスをISeqにする方法をClojureに教えるにはどうすればいいですか? 関連するすべての関数が「うまくいく」ようにしますか?

答えて

2

、あなたはこれらの線に沿ってScalaで汎用的なラッパークラスを提供することができます。

class WrapCollection(repr: TraversableOnce[_]) extends clojure.lang.Seqable { ... } 
2

クラスにIterableインターフェイスが実装されている場合は、seqを呼び出して、順序を取得できます。シーケンスライブラリのほとんどの関数はこれを行いますが、ほぼすべての通常のケースでは、そのままfirstcountのようなseq関数に渡すことができます。アーサーの答えに構築するには

+3

本の最初の部分が真と良いアドバイスですが、あなたは絶対にalready-にSeqableを拡張することはできませんこれはプロトコルではなくインターフェースなので、定義されたクラスです。 – amalloy

+0

これは 'java.lang.Iterable'の場合にのみ当てはまりますか? Scalaのコレクション( 'Option'や' Box'はもちろん)は、 'scala.collection.TraversableOnce'、' scala.collection.TraversableLike'、および/またはそれらのサブトラクトを混在させたり、暗黙的に変換したりしません。 –

+0

s/java.lang/java.util /前のコメント。 :/ –