Option が Iterable 特性を直接拡張しないのはなぜですか?
-
25-09-2019 - |
質問
Option
暗黙的にに変換可能です Iterable
- しかし、なぜ単に実装しないのですか Iterable
直接:
def iterator = new Iterator[A] {
var end = !isDefined
def next() = {
val n = if (end) throw new NoSuchElementException() else get
end = true
n
}
def hasNext = !end
}
編集: 実際、2.8 ではそれよりもさらに奇妙です。 Option
を宣言します iterator
方法:
def iterator: Iterator[A] =
if (isEmpty) Iterator.empty else Iterator.single(this.get)
解決
私は必要とされるであろう、あまりにも多くの非無意味な方法があったことを考えています。
:たとえば、戻り値がためになるために何を期待しますSome(1) ++ Some(2)
これは現在コンパイルおよび2.8における暗黙経由一覧(1,2)と評価されたが、奇妙に思えるます。
たぶんそれは2.7と言うでなぜdocコメントであります
Only potentially unbounded collections should directly sub-class Iterable
の編集の私は、サブタイプのコレクションへのdocコメントの勧告が潜在的に誤解されて残して、以下MATTRさんのコメント@に示すように。そして、それはこの質問にモーフィング「なぜオプションは、コレクションの形質を拡張しないの?」
検討所属していません StackOverflow