Warum verlängert Option nicht das Iterable Merkmal direkt?
-
25-09-2019 - |
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)
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?“