SORU
16 AĞUSTOS 2011, Salı


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:

  1. 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?

  2. 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
16 AĞUSTOS 2011, Salı


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.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Bryan Adams

    Bryan Adams

    30 Mart 2006
  • Learn word 2013 tutorials

    Learn word 2

    5 AĞUSTOS 2014
  • Machinima

    Machinima

    17 Ocak 2006