2014-09-15 16 views

Trả lời

9

Nó có nghĩa là trở Unit:

val res: Unit = new foo match { 
    case bar: Bar => println("First case statement") 
    case _ => 
} 

Nếu bạn thay đổi tuyên bố của bạn để trở lại một cái gì đó thay vì println (mà trả Unit):

val res: Any = new foo match { 
    case bar: Bar => "it's a bar" 
    case _ => 
} 

Bây giờ trình biên dịch đã suy Any bởi vì đó là lần đầu tiên loại siêu phổ biến giữa StringUnit.

Lưu ý rằng trường hợp trùng khớp của bạn là sai bởi vì khớp trên bar một mình có nghĩa là bắt tất cả các biến, bạn có thể muốn bar: Bar.

+0

Đồng ý với câu trả lời và chỉnh sửa của bạn. –

1

Các trống mặc định trường hợp là cần thiết trong mô hình phù hợp với ví dụ của bạn, bởi vì nếu biểu thức trận đấu sẽ ném một MatchError cho mọi lý luận expr đó không phải là một quán bar.

Thực tế là không có mã nào được chỉ định cho trường hợp thứ hai đó, vì vậy nếu trường hợp đó chạy thì không có gì.

Kết quả của cả hai trường hợp là giá trị Đơn vị (), cũng là kết quả của toàn bộ biểu thức đối sánh.

Thêm chi tiết về nó trong Martin Odersky Lập trình trong Scala sách dưới Các trường hợp và kiểu mẫu chương.

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