如果您在 Scala 中有模式匹配(大小写),例如:
foo match {
case a: String => doSomething(a)
case f: Float => doSomethingElse(f)
case _ => ? // How does one determine what this was?
}
有没有办法确定什么类型实际上被捕获了?
如果您在 Scala 中有模式匹配(大小写),例如:
foo match {
case a: String => doSomething(a)
case f: Float => doSomethingElse(f)
case _ => ? // How does one determine what this was?
}
有没有办法确定什么类型实际上被捕获了?
case x => println(x.getClass)
太容易了 :-)
基本上,您只需要将 catch-all 语句中的值绑定到一个名称(x
在这种情况下),然后您可以使用标准的 getClass 方法来确定类型。
如果您尝试根据类型执行特定逻辑,那么您可能做错了。如果您需要一些不想在其中定义内联的“默认”情况,您可以将匹配语句编写为部分函数。例如:
scala> val defaultHandler: PartialFunction[Any, Unit] = {
| case x: String => println("String: " + x)
| }
defaultHandler: PartialFunction[Any,Unit] = <function1>
scala> val customHandler: PartialFunction[Any, Unit] = {
| case x: Int => println("Int: " + x)
| }
customHandler: PartialFunction[Any,Unit] = <function1>
scala> (customHandler orElse defaultHandler)("hey there")
String: hey there
foo match {
case a: String => doSomething(a)
case f: Float => doSomethingElse(f)
case x => println(x.getClass)
}