Khi bạn khớp mẫu lại Danh sách, bạn có thể sử dụng Nil để kiểm tra danh sách trống. Tuy nhiên, nếu loại cơ bản là một Iterable, bạn vẫn có thể kiểm tra Nil, và nó sẽ phá vỡ cho Bộ trống rỗng, vv ... Xem sau phiên REPL:Làm thế nào để ngăn chặn kiểu kết hợp mẫu lỗi này và Nil
scala> val l: Iterable[Int] = List()
l: Iterable[Int] = List()
scala> l match {
| case Nil => 1
| case _ => 2
| }
res0: Int = 1
scala> val l: Iterable[Int] = Set()
l: Iterable[Int] = Set()
scala> l match {
| case Nil => 1
| case _ => 2
| }
res2: Int = 2
Câu hỏi là - làm thế nào tôi có thể ngăn chặn loại này vấn đề? Rõ ràng, nếu l là một List list, nó không có lỗi. Và nếu l thuộc loại Set, nó sẽ không biên dịch. Nhưng điều gì sẽ xảy ra nếu chúng ta có một lớp có một danh sách, hãy định nghĩa một hàm mà mô hình phù hợp theo cách này, và sau đó một người nào đó thay đổi lớp để có một biến lặp chung thay thế? Đây có phải là Nil so với _ mẫu phù hợp với một ý tưởng tồi nói chung?
Loại phụ là một con dao hai lưỡi; sử dụng cẩn thận. –