Можем ли мы использовать совпадение для проверки типа класса
Я новичок в 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")
}
}
}
Код не может быть скомпилирован, так что это невозможно сделать? Что такое scala -way для проверки типа класса? Это:
if(cls.isInstanceOf[String]) { ... }
else if(cls.isInstanceOf[Date]) { ... }
else { ... }
Right?
Ответы
Ответ 1
Это, однако, скомпилирует:
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")
}
Ответ 2
Вам нужен идентификатор перед аннотацией типа в инструкции 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")
}
}
}