2016-05-24 10 views
1

私は、Scalaの変更可能なツリーマップと不変のツリーマップとツリーセットの両方に便利なことを追加したいと思います。一般的には、ツリーセットとツリーマップの両方にimplicitsを追加する

  1. まず(Sortedから)headOptionGenTraversableLikeから)/ lastOptionfrom/to/untilを持ってのTreeMapとTreeSetのの少なくとも上限を定義しよう:

    ここ

    は私の試みです
    type SortedCollection[A, Repr <: SortedCollection[A, Repr]] = collection.generic.Sorted[A, Repr] with collection.GenTraversableLike[A, Repr] 
    
  2. ライト私の使用:

    implicit class RichSortedCollection[A, Repr <: SortedCollection[A, Repr]](s: SortedCollection[A, Repr]) { 
        def greaterThanOrEqualTo(a: A): Option[A] = s.from(a).headOption 
        def lessThan(a: A): Option[A] = s.until(a).lastOption 
        def lessThanOrEqualTo(a: A): Option[A] = s.to(a).lastOption 
    } 
    

これは部分的にしか機能します:SortedSet#greaterThanコンパイルしたがTreeMap#greaterThanません。どうすれば修正できますか?

答えて

1

TreeMap[A, B]は(推移)GenTraversableLike[(A, B), TreeMap[A, B]]Sorted[A, TreeMap[A, B]]を拡張するので、あなたはそれを言うことができます:

Sorted[A, TreeMap[A, B]] with GenTraversableLike[(A, B), TreeMap[A, B]] 

これは近いあなたのタイプの別名にが、型の別名でSortedGenTraverableLikeの最初の型パラメータでありますSortedCollectionは同じでなければなりません。彼らは単に互換性がありません。つまり、Repr = TreeMap[A, B]は問題ありませんが、A = (A, B)は意味がありません。

すべてのマップタイプで同じ問題が発生しますが、唯一の選択肢はマップにもRichSortedCollectionを再実装することです。

関連する問題