Frage

Option ist implizit konvertierbar zu einem Iterable - aber warum es nicht nur einfach implementieren Iterable direkt:

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
}

EDIT: In der Tat ist es sogar weider als das, weil in 2,8 Option nicht erklärt eine iterator Methode :

def iterator: Iterator[A] = 
  if (isEmpty) Iterator.empty else Iterator.single(this.get)
War es hilfreich?

Lösung

Ich denke, dass es zu viele Nicht-unsinnigen Methoden, die erforderlich wäre. Zum Beispiel, was Sie erwarten würden, der Rückgabewert für sein:

Some(1) ++ Some(2)

Das zur Zeit erstellt und auswertet Liste (1,2) über implicits in 2.8, aber es scheint seltsam.

Vielleicht ist das, warum die doc Kommentare in 2.7 sagen:

Only potentially unbounded collections should directly sub-class Iterable

Edit: Wie weiter unten @ MattR Kommentar in gezeigt, ich die doc-Kommentar Empfehlung an Untertyp Weglassen Sammlung ist möglicherweise irreführend. Und es angesichts Morphs diese Frage in „Warum Option nicht erweitert die Sammlung Zug?“

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top