1

Scala の可変および不変の TreeMap と TreeSet の両方に、いくつかの便利な Implicit を追加したいと考えています。

これが私の試みです:

  1. headOption最初に/ lastOption(from GenTraversableLike) とfrom/ to/ until(from )を持つ TreeMap と TreeSet の最小上限を定義してみてくださいSorted:

      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しません。どうすれば修正できますか?

4

1 に答える 1

1

TreeMap[A, B](推移的に) GenTraversableLike[(A, B), TreeMap[A, B]]andSorted[A, TreeMap[A, B]]を拡張するので、次のように言えます。

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

これは型エイリアスに近いですが、型エイリアスのSortedとの最初の型パラメーターは同じでなければならず、それらは上ではありません。それらは単に互換性がありません。つまり、問題ありませんが、意味がありません。GenTraverableLikeSortedCollectionRepr = TreeMap[A, B]A = (A, B)

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

于 2016-05-25T02:58:08.270 に答える