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

  • audivila

    audivila

    5 HAZİRAN 2009
  • HSmasteryoda .

    HSmasteryoda

    22 Ocak 2010
  • PUSHER

    PUSHER

    11 HAZİRAN 2014