Thực hiện chức năng sau:
def fMatch(s: String) = {
s match {
case "a" => println("It was a")
case _ => println("It was something else")
}
}
Mẫu này phù hợp một cách độc đáo:
scala> fMatch("a")
It was a
scala> fMatch("b")
It was something else
Những gì tôi muốn có thể làm như sau:
def mMatch(s: String) = {
val target: String = "a"
s match {
case target => println("It was" + target)
case _ => println("It was something else")
}
}
Điều này gây ra lỗi sau:
fMatch: (s: String)Unit
<console>:12: error: unreachable code
case _ => println("It was something else")
Tôi đoán điều này là do nó nghĩ rằng đích thực sự là một cái tên mà bạn muốn gán cho bất cứ thứ gì đầu vào. Hai câu hỏi:
Tại sao hành vi này? Trường hợp không thể chỉ tìm kiếm các biến hiện có trong phạm vi có kiểu thích hợp và sử dụng những biến đó trước tiên và nếu không tìm thấy, sau đó coi đích như một cái tên để so khớp?
Có một cách giải quyết cho điều này? Có cách nào để khớp mẫu với các biến không? Cuối cùng người ta có thể sử dụng một câu lệnh if lớn, nhưng trường hợp khớp thì thanh lịch hơn.