56 votes

Peut-on utiliser match pour vérifier le type d'une classe

Je suis nouveau sur scala et j'apprends le mot-clé match

Je veux savoir si nous pouvons utiliser le mot-clé match pour vérifier le type d'une classe. Mon code est :

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

Le code ne peut pas être compilé, donc c'est impossible de faire ça ? Quel est le scala-way pour vérifier le type d'une classe? Est-ce :

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

Droit?

91voto

Wilfred Springer Points 5430

Ce sera toutefois la compilation:

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

... ou la version simplifiée de celle-ci :

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

15voto

Brian Hsu Points 6146

Vous avez besoin d'un identifiant avant l'annotation de type dans l'instruction case

Essayez ceci et cela devrait fonctionner:

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X