Option
est implicitement convertible en une Iterable
- mais pourquoi il ne fait pas que simplement mettre en œuvre Iterable
directement:Pourquoi l'option ne prolonge-t-elle pas directement le trait 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:En fait, il est même Weider que parce que dans 2,8 Option
ne déclare une méthode iterator
:
def iterator: Iterator[A] =
if (isEmpty) Iterator.empty else Iterator.single(this.get)
Vous pouvez toujours changer le code source et voir quelles pauses. :-) –
Eh bien, 'isEmpty' aurait besoin d'un modificateur' override' pour les débutants! Je me demandais juste si c'était une chose conceptuelle –
Je suppose que c'est parce que l'option est une monade et non une collection. Pour moi, il est logique que les collections soient itératives, mais une monade n'est pas une collection tout de suite. Btw: Je ne connais pas Scala 2.7, mais dans 2.8 Option.iterator est implémenté en utilisant Iterator.empty et Iterator.single. –