Ambil fungsi berikut:
def fMatch(s: String) = {
s match {
case "a" => println("It was a")
case _ => println("It was something else")
}
}
Pola ini cocok dengan baik:
scala> fMatch("a")
It was a
scala> fMatch("b")
It was something else
Yang ingin saya lakukan adalah sebagai berikut:
def mMatch(s: String) = {
val target: String = "a"
s match {
case target => println("It was" + target)
case _ => println("It was something else")
}
}
Ini memberikan kesalahan berikut:
fMatch: (s: String)Unit
<console>:12: error: unreachable code
case _ => println("It was something else")
Saya kira ini karena menurutnya target sebenarnya adalah nama yang ingin Anda tetapkan untuk apa pun inputnya. Dua pertanyaan:
Mengapa perilaku ini? Tidak dapat kasus hanya mencari variabel yang ada dalam lingkup yang memiliki jenis yang sesuai dan menggunakan yang pertama dan, jika tidak ada yang ditemukan, maka perlakukan target sebagai nama untuk pencocokan pola?
Apakah ada solusi untuk ini? Adakah cara untuk mencocokkan pola dengan variabel? Pada akhirnya, seseorang dapat menggunakan pernyataan if yang besar, tetapi kotak korek api lebih elegan.