Option
è implicitamente convertibile in una Iterable
- ma perché non è solo solo attuare Iterable
direttamente:Perché l'opzione non estende direttamente il tratto 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
}
EDIT:In realtà è ancora Weider di quello, perché in 2.8 Option
fa dichiarare un metodo di iterator
:
def iterator: Iterator[A] =
if (isEmpty) Iterator.empty else Iterator.single(this.get)
È sempre possibile modificare il codice sorgente e vedere quali interruzioni. :-) –
Bene, 'isEmpty' avrebbe bisogno di un modificatore' override' per i principianti! Mi chiedevo solo se fosse una cosa concettuale –
Immagino che sia perché Option è una monade e non una collezione. Per me ha senso che le raccolte siano iterabili, ma una monade non è una collezione immediatamente. Btw: Non so su Scala 2.7, ma nel 2.8 Option.iterator è implementato usando Iterator.empty e Iterator.single. –