2010-05-29 47 views
8

Trong Chương 3 của Programming Scala, tác giả đưa ra hai ví dụ về các vòng lặp/để hiểu, nhưng chuyển đổi giữa việc sử dụng() và {} 's. Tại sao trường hợp này lại xảy ra, vì chúng vốn giống như chúng đang làm điều tương tự vậy? Có lý do nào không? breed <- dogBreeds là trên dòng thứ 2, ví dụ # 2?Hiểu Phạm vi về Vòng lặp của Scala (Để hiểu)

// #1()'s 
for (breed <- dogBreeds 
    if breed.contains("Terrier"); 
    if !breed.startsWith("Yorkshire") 
) println(breed) 

// #2 {}'s 
for { 
    breed <- dogBreeds 
    upcasedBreed = breed.toUpperCase() 
} println(upcasedBreed) 

Trả lời

8

Nếu bạn đọc những Mẹo hay màu xanh lá cây:

cho các biểu thức có thể được định nghĩa với ngoặc hoặc xoăn niềng răng, nhưng sử dụng dấu ngoặc nhọn có nghĩa là bạn không cần phải tách bộ lọc của bạn với dấu chấm phẩy . Hầu hết thời gian, bạn sẽ thích sử dụng dấu ngoặc nhọn khi bạn có nhiều hơn một bộ lọc, chuyển nhượng vv

Vì vậy, đối với sự hiểu biết () and {} đều giống nhau là điều duy nhất rằng sự thay đổi là dấu phân cách sử dụng : đối với (), bạn phải sử dụng semicolon ";" làm dấu phân tách và cho {} bạn sử dụng new line.

+12

Một tính năng WTF khác của Scala. Một ngôn ngữ tuyệt vời, nhưng rải rác với đường không chỉ là không cần thiết, mà còn cho là có hại. – andyczerwonka

+1

Suy luận Semicolon không đến miễn phí. Lần khác nó cắn là 'val a = 1 + 2 + 3 + 4'. Điều này được phân tách thành 'val a = 1. + (2). + (3); 4.unary _ +() ' – retronym

+0

Lưu ý rằng ví dụ đầu tiên không biên dịch. – retronym

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