case _是什么意思:scala中的意思

时间:2015-06-10 21:09:40

标签: scala

例如:

    castType match {                                                                                  
      case _: ByteType => datum.toByte  
      case _: ShortType => datum.toShort                                                              
      case _: IntegerType => datum.toInt
      case _ => throw new RuntimeException(s"Unsupported type: ${castType.typeName}") 
    }

究竟是什么做的? ''是一个占位符,通常意味着“匹配任何东西”,但“:”是做什么的?如何处理“ByteType”类型?

2 个答案:

答案 0 :(得分:6)

case _ : ByteType =>表示匹配的对象必须是ByteType

类型

整个match语句也可以写成一系列if语句:

if (castType.isInstanceOf[ByteType]) {
   datum.toByte
} else if (castType.isInstanceOf[....
...

但那会很难看,不是吗?

答案 1 :(得分:0)

与答案本身不同,以上答案中的某些评论实际上是有帮助的。

case _ : ByteTypeif (castType.isInstanceOf[ByteType]),而case ByteType(castType == ByteType)

这种写法在精度可能变化的DecimalTypes中特别有用。

case _: DecimalType =>

例如,请参见SchemaConverters