Họ dường như không để trộn mà cũng:Case, phù hợp với mô hình và nhà thầu cà ri trong Scala
abstract class A
case class B (var a: Int)(var b: String) extends A
case class C extends A
Sau đây sẽ không làm việc:
B(1)("1") match {
case B(a)(b) => print("B")
case C() => print("C")
}
Vấn đề là mô hình phù hợp và các đối số bị quấy rầy dường như không hoạt động. Có một cách giải quyết cho điều này?
Ví dụ đầu tiên của bạn sẽ hoạt động, nhưng tôi sẽ không thể truy cập B.a và B.b trong tuyên bố trường hợp mà không làm một số kiểu chữ xấu xí. Ngoài ra, trong bản chỉnh sửa của bạn, tôi không chắc tôi hiểu tại sao mẫu hàm tạo không bị quấy rầy. Có phải vì không thích hợp? –
Thành thật mà nói tôi không biết tại sao nó hoạt động. Tôi tình cờ gặp nó qua thử và sai. Nó chắc chắn được đề cập ở đâu đó trong đặc tả Scala. Bạn có thể muốn tìm nó nếu nó có liên quan trong trường hợp của bạn. – agilesteel
Có, mẫu bạn sử dụng trong câu lệnh trường hợp là mẫu được đưa ra bởi kết quả của hàm không áp dụng. Nó không bao giờ có thể được curried. Phần tương ứng trong đặc tả scala là §8.1.8 – Nicolas