2011-03-03 8 views
36

Ben scala'ya yeniyim ve şimdi match anahtar kelimeyi öğreniyorum.Bir sınıfın türünü kontrol etmek için maç kullanabiliriz

Bir sınıfın türünü kontrol etmek için match anahtar sözcüğünü kullanıp kullanamayacağımızı bilmek istiyorum. Benim kodum:

object Main { 
    def main(args: Array[String]) { 
     val x = "AA" 
     checkType(x) 
    } 

    def checkType(cls: AnyRef) { 
     cls match { 
      case String => println("is a String") 
      case Date => println("is a Date") 
      case _ => println("others") 
     } 
    } 
} 

Kod derlenemiyor, bu yüzden, bunu yapmak imkansız? Bir sınıfın türünü kontrol etmek için scala yolu nedir? Şunlardır:

if(cls.isInstanceOf[String]) { ... } 
else if(cls.isInstanceOf[Date]) { ... } 
else { ... } 

Doğru?

cevap

69

Ancak bu olacak derleme:

def checkType(cls: AnyRef) {      
    cls match {         
    case s: String => println("is a String") 
    case d: Date => println("is a Date")  
    case _ => println("others")    
    }             
} 

... ya bunun basitleştirilmiş versiyonu:

def checkType(cls: AnyRef) = 
    cls match {         
    case _: String => println("is a String") 
    case _: Date => println("is a Date")  
    case _ => println("others")    
    }             
+6

ya, ** hatta ** basit: maç bir değer verir, çünkü '(...)' çevresinde println ve sahip vakaları koymaktır uygun dizeleri çöz. – Carl

10

Sen case açıklamada tür ek açıklaması öncesinde bir tanımlayıcı gerekir.

bu deneyin ve çalışması gerekir:

object Main { 
    def main(args: Array[String]) { 
     val x = "AA" 
     checkType(x) 
    } 

    def checkType(cls: AnyRef) { 
     cls match { 
      case x: String => println("is a String:"+ x) 
      case x: Date => println("is a Date:" + x) 
      case _ => println("others") 
     } 
    } 
} 
+1

Bu yanıtı beğeniyorum, çünkü özel _'den başka bir ad verilmediyse (bu snippet 'cls'de) durum cümleleri içinde kontrol edilen değerle herhangi bir şey yapmak imkansızdır. Çoğu durumda, nesneyi türüne göre harekete geçirmek istersiniz ve bu cevap bu kullanım durumuna göre iyi bir şekilde düzenlenmiştir. Önemli olduğu kadarıyla ... – matanster