18

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)
4

1 に答える 1

9

必要となる無意味な方法が多すぎると思います。たとえば、次のような戻り値が期待されます。

Some(1) ++ Some(2)

これは現在、2.8 で暗黙的にコンパイルされ、List(1,2) に評価されますが、奇妙に思えます。

おそらくそれが、2.7 のドキュメント コメントが次のように言う理由です。

Only potentially unbounded collections should directly sub-class Iterable

編集:以下の @MattR のコメントに示されているように、コレクションのサブタイプに対するドキュメント コメントの推奨事項を除外すると、誤解を招く可能性があります。そして、それを考えると、この質問は「なぜ Option は Collection トレイトを拡張しないのですか?」に変わります。

于 2010-04-09T20:26:29.010 に答える