すべてのIterable
をカスタムコードで拡張したいと思います。このため 私は次のように書いた:汎用クラスのサブタイプの暗黙のクラス
implicit class RichIterable[A, B <: Iterable[A]](b: B) {
def nonEmptyOpt: Option[B] = if (b.nonEmpty) Some(b) else None
}
、私は間違いなくそう
List(1, 2, 3).nonEmptyOpt
ようIterable
のサブクラスであることList
に、このメソッドを使用する場合、私は
value nonEmptyOpt is not a member of List[Int]
を取得
どうすれば解決できますか?私は一度つまずい
興味があるだけ、失われた/ "実存" 行くことによって何も変更されましたか? – jwvh
@jwvhこれは、厳密に1つの型パラメータを持たないすべてのサブクラスに対してexactaの戻り値の型を失います( '' B、 '[A]それは、それらが拡張する 'Iterable'と同じです。いくつかの例は、 'Map [A、B]'または 'scala.xml.NodeSeq'です。たとえば、 'Map(1-> 2).nonEmptyOpt'は' Option [Map [...]] 'ではなく、Option [Iterable [...]]'となります。 – Kolmar
@Kolmar、私は戻ってきました。 'B [X] ...'と 'B [_] ...'の間にあるので、 'Map()'ハンドリングの違いは分かりませんでした。 – jwvh