2012-11-15 45 views
6

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) 
+1

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

Trả lời

11

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ớ).

+0

vì 'def' được sử dụng các giá trị không được ghi nhớ;) – sschaef

+1

@sschaef: true,' val stream = from (0) 'sẽ phải được sử dụng, cảm ơn. –

6

Đó 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)đuôi

1

Đ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.

0

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!

Các vấn đề liên quan