我们可以使用匹配来检查类的类型

Fre*_*ind 50 scala pattern-matching match

我是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")
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

代码无法编译,因此,这是不可能的?什么是scala-way来检查类的类型?是吗:

if(cls.isInstanceOf[String]) { ... }
else if(cls.isInstanceOf[Date]) { ... }
else { ... }
Run Code Online (Sandbox Code Playgroud)

对?

Wil*_*ger 85

然而,这编译:

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

...或简化版本:

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

  • 或者,**甚至**更简单:因为匹配产生一个值,就是把'println(...)`放在它周围,让案例解析为适当的字符串. (10认同)

Bri*_*Hsu 13

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")
        }
    }
}
Run Code Online (Sandbox Code Playgroud)