【发布时间】:2015-05-01 08:29:05
【问题描述】:
我有一个字符串格式化函数fmt(v:Any): String,它需要根据v 的运行时类型执行不同的操作。所以它看起来像:
def fmt(v:Any): String = {
v match {
case a: Int => "Int: " + a
case a: String => "\"" + a + "\""
case a => throw new IllegalArgumentException(s"??? '$a', ${a.getClass.getCanonicalName}?!")
}
}
当我传入 scala 枚举值时,这会引发 IllegalArgumentException("??? 'myVal', scala.Enumeration.Val?!")。但是,添加一个
case a: scala.Enumeration.Val => "Hello enum"
不编译:object Enumeration 不是包 scala 的成员 注意:Enumeration 类存在,但没有伴生对象。
如何检测传入的实例是scala枚举值?
if (a.getClass.getCanonicalName == "scala.Enumeration.Val") 应该可以工作,但感觉就像一个 hack - 我可以做任何实际类型的模式匹配吗?
【问题讨论】: