2011-03-03 2 views
36

저는 scala를 처음 사용 했으므로 이제 match 키워드를 배우고 있습니다.일치 유형을 사용하여 클래스 유형을 확인 할 수 있습니까?

match 키워드를 사용하여 클래스 유형을 확인할 수 있는지 알고 싶습니다. 내 코드 :

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") 
     } 
    } 
} 

코드를 컴파일 할 수 없으므로 불가능합니다. 수업의 유형을 확인하는 스칼라 방식은 무엇입니까? 그것이 :

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

오른쪽?

답변

69

이 그러나 것이다 컴파일 :

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

... 또는의 단순화 된 버전 :

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

하거나, **도 ** 간단 : 일치하는 값을 산출하기 때문에,'(...)'주위에 println하고있는 경우를 넣어하는 것입니다 적절한 문자열로 해석하십시오. – Carl

10

당신은 case 문에서 유형 약어 전에 식별자가 필요합니다.

이 시도하고 그것을 작동합니다 :

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

나는 특수한 _ 이외의 이름이 주어지지 않는 한이 절의 'cls'에있는 case 절 안에있는 확인 된 값으로 무엇이든 할 수 없으므로이 대답을 좋아합니다. 많은 경우에 유형에 따라 객체에 대한 조치를 취하고 싶을 것입니다.이 답변은 해당 유스 케이스에 잘 맞습니다. 그것이 중요 할만큼 ... – matanster

관련 문제