2011-03-03 15 views
36

Soy nuevo en Scala, y estoy aprendiendo la palabra clave match ahora.podemos usar partido para comprobar el tipo de una clase

Quiero saber si podemos utilizar la palabra clave match para comprobar el tipo de una clase. Mi código es:

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

El código no puede ser compilado, así, es imposible hacer esto? ¿Cuál es la forma de escalar para verificar el tipo de una clase? ¿Es esto:

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

Derecho?

Respuesta

69

Sin embargo, esto hará de compilación:

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

... o la versión simplificada de que:

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

o, incluso ** ** más simple: desde fósforo produce un valor, es poner el 'println (...)' alrededor de ella y tienen los casos resolver a las cadenas apropiadas. – Carl

10

Se necesita un identificador antes de la anotación de tipo de case comunicado.

Prueba esto y debería funcionar:

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

me gusta esta respuesta, ya que es imposible hacer nada con el valor registrado dentro de las cláusulas de casos (en este fragmento 'cls') a menos que se le da un nombre que no sea el especial _. En muchos casos, le conviene tomar medidas sobre el objeto en función de su tipo y esta respuesta está bien orientada hacia ese caso de uso. Por mucho que importe ... – matanster

Cuestiones relacionadas