Tôi nhận ra đây có lẽ là một câu hỏi đơn giản nhưng '# ::' đạt được ở dòng mã dưới đây là gì. Nó có phải là một sự khác biệt đặc biệt của khuyết điểm?Toán tử # :: có nghĩa là gì?
def from(n: Int): Stream[Int] = n #:: from(n + 1)
Tôi nhận ra đây có lẽ là một câu hỏi đơn giản nhưng '# ::' đạt được ở dòng mã dưới đây là gì. Nó có phải là một sự khác biệt đặc biệt của khuyết điểm?Toán tử # :: có nghĩa là gì?
def from(n: Int): Stream[Int] = n #:: from(n + 1)
Toán tử này được sử dụng để xây dựng streams như trái ngược với danh sách. Xem xét cùng một đoạn mã với nhược điểm đơn giản:
def from(n: Int): List[Int] = n :: from(n + 1)
chạy phương pháp này sẽ dẫn đến StackOverflowError
. Nhưng với đuôi Stream[Int]
được đánh giá một cách lười biếng chỉ khi cần thiết (và các giá trị đã tính được ghi nhớ).
vì 'def' được sử dụng các giá trị không được ghi nhớ;) – sschaef
@sschaef: true,' val stream = from (0) 'sẽ phải được sử dụng, cảm ơn. –
Đó là tương đương với ::
cho danh sách, nhưng sử dụng với Luồng
Đó là, n
trở thành đầu của một dòng suối nơi from(n+1)
là đuôi
Điều này có nghĩa là tạo đối tượng Luồng.
Giống hệt với cons
cho Danh sách - thay vì ::
luôn tạo Danh sách, #::
luôn tạo Luồng.
Hơi muộn, nhưng có http://scalex.org/ thực sự tốt để khóa những thứ như vậy (google thực sự là một mớ hỗn độn về bất kỳ thứ gì không phải chữ số-alpha)! Chúc may mắn!
Bạn phải tham gia Lập trình chức năng trong lớp Scala. Tôi đồng ý với câu trả lời Pere. – cainj