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.8Option中确实声明了一个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 的评论所示,我将文档评论推荐遗漏到子类型 Collection 可能会产生误导。考虑到它将这个问题变成“为什么 Option 不扩展 Collection 特征?”

于 2010-04-09T20:26:29.010 回答