Tôi đang làm phù hợp với một số trường hợp và muốn xử lý hai trường hợp theo cùng một cách. Một cái gì đó như thế này:Đối sánh nhiều trường hợp với các lớp học trong scala
abstract class Foo
case class A extends Foo
case class B(s:String) extends Foo
case class C(s:String) extends Foo
def matcher(l: Foo): String = {
l match {
case A() => "A"
case B(sb) | C(sc) => "B"
case _ => "default"
}
}
Nhưng khi tôi làm điều này tôi nhận được lỗi:
(fragment of test.scala):10: error: illegal variable in pattern alternative
case B(sb) | C(sc) => "B"
tôi có thể lấy nó làm việc của tôi loại bỏ các thông số từ định nghĩa của B và C nhưng làm thế nào tôi có thể kết hợp với các params?
Mặc dù ví dụ của tôi không hiển thị nhưng tôi cần các thông số đó. Có vẻ như tôi sẽ phải sử dụng một vật thể. Cảm ơn! – timdisney
Có lý do scala không cho phép "trường hợp A (aString) | trường hợp B (aString) => println (aString)"? Có vẻ như miễn là loại aString giống hệt nhau cho cả A và B, nó sẽ được cho phép. Ví dụ cuối cùng của bạn có vẻ như tốt hơn là không sao chép các trường hợp B và C. –
Tôi sẽ hướng dẫn thêm cho bạn. Tôi nghĩ sẽ tốt hơn nếu có 'trường hợp A (x) | B (x) => println (x) 'được cho phép trong đó loại' x' được đặt thành giới hạn trên trong hệ thống kiểu của bất kỳ sản phẩm A (x) và B (x) nào. –