私は をClojure ISeqとして使用したいと思っているScalaクラス(Lift's Box、Scala's Optionなど)の束を持っています。ClojureクラスからのClojure ISeq
これらのクラスをISeqにする方法をClojureに教えるにはどうすればいいですか? 関連するすべての関数が「うまくいく」ようにしますか?
私は をClojure ISeqとして使用したいと思っているScalaクラス(Lift's Box、Scala's Optionなど)の束を持っています。ClojureクラスからのClojure ISeq
これらのクラスをISeqにする方法をClojureに教えるにはどうすればいいですか? 関連するすべての関数が「うまくいく」ようにしますか?
、あなたはこれらの線に沿ってScalaで汎用的なラッパークラスを提供することができます。
class WrapCollection(repr: TraversableOnce[_]) extends clojure.lang.Seqable { ... }
クラスにIterable
インターフェイスが実装されている場合は、seq
を呼び出して、順序を取得できます。シーケンスライブラリのほとんどの関数はこれを行いますが、ほぼすべての通常のケースでは、そのままfirst
やcount
のようなseq関数に渡すことができます。アーサーの答えに構築するには
本の最初の部分が真と良いアドバイスですが、あなたは絶対にalready-にSeqableを拡張することはできませんこれはプロトコルではなくインターフェースなので、定義されたクラスです。 – amalloy
これは 'java.lang.Iterable'の場合にのみ当てはまりますか? Scalaのコレクション( 'Option'や' Box'はもちろん)は、 'scala.collection.TraversableOnce'、' scala.collection.TraversableLike'、および/またはそれらのサブトラクトを混在させたり、暗黙的に変換したりしません。 –
s/java.lang/java.util /前のコメント。 :/ –