Option
jest niejawnie zamienny do Iterable
- ale dlaczego nie po prostu tylko wdrożyć Iterable
bezpośrednio:Dlaczego opcja nie rozszerza bezpośrednio cechy Iterowalnej?
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:W rzeczywistości jest to nawet Weider niż ponieważ w 2,8 Option
ma zadeklarować metodę iterator
:
def iterator: Iterator[A] =
if (isEmpty) Iterator.empty else Iterator.single(this.get)
Zawsze możesz zmienić kod źródłowy i zobaczyć, co łamie. :-) –
Cóż, 'isEmpty' będzie potrzebował modyfikatora' override' na początek! Właśnie zastanawiałem się, czy to była pojęciowa rzecz. –
Myślę, że to dlatego, że Option to monada, a nie zbiór. Dla mnie ma sens, że kolekcje są iterable, ale monada nie jest zbiorem od razu. Btw: Nie wiem o Scali 2.7, ale w 2.8 Option.iterator jest implementowany za pomocą Iterator.empty i Iterator.single. –