Neden Scala desen eşleştirme değişkenleri ile çalışmıyor?
Aşağıdaki fonksiyon:
def fMatch(s: String) = {
s match {
case "a" => println("It was a")
case _ => println("It was something else")
}
}
Bu desen güzel maçlar:
scala> fMatch("a")
It was a
scala> fMatch("b")
It was something else
Yapmak istediÄŸim ÅŸey ÅŸudur:
def mMatch(s: String) = {
val target: String = "a"
s match {
case target => println("It was" target)
case _ => println("It was something else")
}
}
Bu, aşağıdaki hata verir:
fMatch: (s: String)Unit
<console>:12: error: unreachable code
case _ => println("It was something else")
Bu hedef aslında bu giriş ne olursa olsun atamak istediğiniz bir isim olduğunu düşünüyor çünkü sanırım. İki sorum var:
Neden bu davranışlar? Dava sadece uygun türü kapsamında mevcut değişkenleri göremiyorum ve bu ilk kullanım ve eğer hiçbiri bulunursa, o zaman üzerinde patternmatch bir isim olarak hedef tedavi?
Bunun için bir çözüm var mı? Değişkenler karşı maç desen için bir yolu var mı? Sonuçta büyük bir if ifadesi kullanabilir, ancak büyük / küçük harf Eşleştir daha şık.
CEVAP
Aradığınız şeyistikrarlı bir tanımlayıcı. Scala, bu iki büyük harf ile başlayan, ya da backticks alınmalıdır.
Bu iki sorun için çözüm olabilir:
def mMatch(s: String) = {
val target: String = "a"
s match {
case `target` => println("It was" target)
case _ => println("It was something else")
}
}
def mMatch2(s: String) = {
val Target: String = "a"
s match {
case Target => println("It was" Target)
case _ => println("It was something else")
}
}
Yanlışlıkla zaten kapsayan kapsamında var olan değişkenler için başvuran önlemek için, varsayılan davranış küçük desenler için değişkenleri ve istikrarlı tanımlayıcıları değil bu mantıklı değil bence. Büyük harf, ya da geri dilimleri ile başlayan bir şey görüyorum sadece, çevredeki kapsam geliyor farkında olmak gerekir.

'In Scala desen eÅŸleÅŸtirme sistem...
Nasıl Scala desen eşleştirme koduna dü...
Neden Scala derleyicisi varsayılan bağ...
Neden'kendini kapatma script etik...
Neden't deÄŸiÅŸkenleri bir switch i...