Tôi muốn một bộ giải nén để chuyển đổi hoàn toàn các tham số của nó, nhưng nó dường như không hoạt động. Hãy xem xét trường hợp này rất đơn giản:Scala - chuyển đổi ngầm với unapply
case class MyString(s: String) {}
implicit def string2mystring(x: String): MyString = new MyString(x)
implicit def mystring2string(x: MyString) = x.s
object Apply {
def unapply(s: MyString): Option[String] = Some(s)
}
Nhưng tôi không thể sử dụng nó như tôi mong chờ:
val Apply(z) = "a" // error: scrutinee is incompatible with pattern type
bất cứ ai có thể giải thích lý do tại sao nó không thành công để chuyển đổi các tham số String
-MyString
? Tôi hy vọng nó sẽ gọi số string2mystring("a")
khi đang bay. Rõ ràng tôi có thể giải quyết vấn đề bằng cách nói val Apply(y) = MyString("a")
, nhưng có vẻ như tôi không phải làm như vậy.
Lưu ý: Câu hỏi này tương tự như this one, nhưng 1) câu hỏi đó không thực sự có câu trả lời hay về lý do tại sao điều này xảy ra, 2) ví dụ phức tạp hơn cần thiết.
Cảm ơn. Đó là một chút thất vọng. Bạn có biết động lực là gì cho quyết định đó không? – dhg
Yep, thêm 'def unapply (p: String): Option [String] = Một số (p)' thành 'Áp dụng' thực hiện thủ thuật. Vì vậy, tôi sẽ đi với điều đó. Cảm ơn. – dhg
@dhg Tôi đã chỉnh sửa câu trả lời - một chế độ xem bị ràng buộc dường như hoạt động tốt. –