2011-07-19 21 views
5

Aşağıdaki koddaDeğişken kapsamı için desen eşleme (Scala)

val x = 5 
val y = 4 match { 
    case x => true 
    case _ => false 
} 

y değeri doğrudur. Scala, x'i desen eşleştirmesinde serbest bir değişken olarak yorumlar.

Bu problem nasıl çözülür?

+3

Neden Mevcut bir soruyu çoğaltmak vermedi ve daha sonra kendiniz cevap? http://stackoverflow.com/questions/6172557/problem-with-scala-matching-scope http://stackoverflow.com/questions/5153590/why-does-scala-complain-when-given-this- pattern-match-on-an-integral-değeri – dhg

+0

@dhg: Bu soruyu SO üzerinde bulamadım, işte bu yüzden. Küçük gizli blogumda bir not almak ya da zihinsel bir yazı yapmak yerine SO'yu bilgi deposu olarak kullanmayı tercih ettiğimden beri kendi sorumu yanıtlıyorum. Bağlantı için teşekkürler, yinelenen ile kapatmaya katılıyorum. – ron

cevap

7

az şaşkınlık prensibini çağırma, ben sadece yapacağım:

val x = 5 
val y = 4 match { 
    case z if z == x => true 
    case _ => false 
} 
+0

Ron yanıtı iyi olanıdır, doğrudan eşleştirilebilen bir durum ekleyebilirsin . (downvote) – Nicolas

+0

Bence bu durum aynı derecede hızlı ve en az şaşkınlık ilkesini hatırlıyorum. (upvote) – Anonymous

+0

Bu ilkeyle ilgili bir noktanız var. – ron

12

bir kapsamlı değişken bağlamak için gösterir.

Alternatif olarak, bir değişken bir büyük harfle başlıyorsa, backticking olmaksızın kapsamlı bir değişkene bağlanır.

+0

ayrıca bkz. Http://scala-programming-language.1934581.n4.nabble.com/scala-pattern-matching-proposal-td1999364.html – ron