例如:
castType match {
case _: ByteType => datum.toByte
case _: ShortType => datum.toShort
case _: IntegerType => datum.toInt
case _ => throw new RuntimeException(s"Unsupported type: ${castType.typeName}")
}
究竟是什么做的? ''是一个占位符,通常意味着“匹配任何东西”,但“:”是做什么的?如何处理“ByteType”类型?
答案 0 :(得分:6)
case _ : ByteType =>
表示匹配的对象必须是ByteType
整个match
语句也可以写成一系列if
语句:
if (castType.isInstanceOf[ByteType]) {
datum.toByte
} else if (castType.isInstanceOf[....
...
但那会很难看,不是吗?
答案 1 :(得分:0)
与答案本身不同,以上答案中的某些评论实际上是有帮助的。
case _ : ByteType
像if (castType.isInstanceOf[ByteType])
,而case ByteType
像(castType == ByteType)
这种写法在精度可能变化的DecimalTypes中特别有用。
case _: DecimalType =>
例如,请参见SchemaConverters