我有一个Scala函数,它传递“Any”类型的消息。在大多数情况下,它将是一个大小为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
}
}
答案 0 :(得分:8)
为什么不使用pattern matching?
def function(msg: Any) = {
msg match {
case tuple @ (a: Any, b: Any) => tuple
}
}
答案 1 :(得分:0)
模式匹配
msg match {
case (x,y) => ...
}
答案 2 :(得分:0)
我在使用Scala Build Tools版本sbt-0.13.8
进行测试后得出了这个答案def castfunction(msg:Any):Tuple2 [Char,Int] = { msg match {case(x:Char,y:Int)=>元组2(x,y)} }
谢谢。 弗兰克