Option
là mặc nhiên chuyển đổi thành một Iterable
- nhưng tại sao nó không chỉ là chỉ thực hiện Iterable
trực tiếp:Tại sao Tùy chọn không mở rộng đặc điểm Iterable trực tiếp?
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:Trong thực tế nó thậm chí còn Weider hơn thế bởi vì trong 2,8 Option
không khai báo một phương pháp iterator
:
def iterator: Iterator[A] =
if (isEmpty) Iterator.empty else Iterator.single(this.get)
Bạn luôn có thể thay đổi mã nguồn và xem nội dung nào bị hỏng. :-) –
Vâng, 'isEmpty' sẽ cần một công cụ sửa đổi' override' cho người mới bắt đầu! Tôi chỉ tự hỏi liệu đó có phải là một điều khái niệm không? –
Tôi đoán đó là vì Tùy chọn là một đơn nguyên chứ không phải là một bộ sưu tập. Đối với tôi, có nghĩa là các bộ sưu tập có thể lặp lại, nhưng một đơn nguyên không phải là một bộ sưu tập ngay lập tức. Btw: Tôi không biết về Scala 2.7, nhưng trong 2.8 Option.iterator được thực hiện bằng cách sử dụng Iterator.empty và Iterator.single. –