web-dev-qa-db-ja.com

マッチを使用してクラスのタイプを確認できますか

私は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 { ... }

右?

49
Freewind

ただし、これはwillコンパイル:

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

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")
        }
    }
}
13
Brian Hsu