Đi chức năng sau:Tại sao khớp mẫu trong Scala không hoạt động với các biến?
def fMatch(s: String) = {
s match {
case "a" => println("It was a")
case _ => println("It was something else")
}
}
Mô hình này phù hợp độ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 là 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 cho phép ra khỏi 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à bởi vì nó cho rằng đích thực sự là tên mà bạn muốn gán cho bất kỳ đầu vào nào. Hai câu hỏi:
Tại sao lại có hành vi này? Không thể chỉ tìm kiếm các biến hiện có trong phạm vi có loại thích hợp và sử dụng các biến đó trước và nếu không tìm thấy, thì coi mục tiêu là tên để patternmatch kết thúc?
Có giải pháp cho việc này không? Bất kỳ cách nào để mô hình phù hợp với các biến? Cuối cùng người ta có thể sử dụng một tuyên bố nếu lớn, nhưng trường hợp phù hợp là thanh lịch hơn.
Related: http://stackoverflow.com/questions/7083502/why-cant-a-variable-be-a-stable-identifier –
Tôi tin rằng câu hỏi này, mã và câu trả lời là lỗi thời như của Scala 2.12.x. Nó sẽ là tốt đẹp nếu phiên bản được áp dụng đã được đề cập như là một phần của câu hỏi. – conny