2

タイプ「Any」のメッセージを渡すScala関数があります。ほとんどの場合、サイズ 2 のタプルになります。このメッセージを受け取る関数は、タプル要素の特定の型を確認する必要があります。

main() {
// call to function
// msg is of type Any.
    func (msg) 
}

今、私の機能では、

function (msg : Any) {
    String inputType = msg.getClass.getCanonicalName
    if (inputType.compareTo("scala.Tuple2") == 0) {
        // I now know that the input to the function is a tuple..I want to extract the type of each element in this tuple.
        //something like:
        var tuple = msg.asInstanceof(scala.Tuple2) // This line gives an error. I want to cast object of Type Any to a tuple.
        var 1type = tuple._1.getClass.getCanonicalName
        var 2type = tuple._2.getClass.getCanonicalName
    }
}
4

3 に答える 3

9

パターン マッチングを使用しないのはなぜですか。

def function(msg: Any) = {
  msg match {
    case tuple @ (a: Any, b: Any) => tuple
  }
}
于 2012-12-06T20:22:42.863 に答える
0

Scala Build Tools バージョン sbt-0.13.8 を使用してテストした後、この回答を思いつきました

def castfunction(msg: Any):Tuple2[Char,Int] = { msg match { case (x: Char,y:Int) => Tuple2(x,y) } }

ありがとうございました。フランク

于 2015-05-15T01:08:25.927 に答える
0

パターンマッチング

msg match {
   case (x,y) =>  ...
}
于 2012-12-06T20:22:10.117 に答える