大小写匹配“ reflect.runtime.universe.Type”

时间:2018-09-21 21:19:43

标签: scala scala-reflect

在Java中,我们可以switch(value) {case(x): // do something;}

在Scala中,我们可以使用大小写匹配表达式执行类似的操作:

val a = 1
a match {
  case 1 => 1
  case 2 => 2
} // 1

但是,它不适用于类型为reflect.runtime.universe.Type的值。

val tpe = typeOf[Int]
tpe match {
  case typeOf[Int] => 1
  case typeOf[Option[Any]] => 2
}
error: not found: type typeOf
case typeOf[Int] => 1
            ^

相反,我必须这样做:

if (tpe =:= typeOf[Int]) {...}
else if (tpe =:= Option[Any]) {...}

这里有机会使用大小写匹配表达式吗?

1 个答案:

答案 0 :(得分:0)

您可以执行此操作(尽管我不确定您为什么要这么做):

val tpe = typeOf[Int]

val intType = typeOf[Int]
val optionAnyType = typeOf[Option[Any]]

tpe match {
    case `intType` => 1
    case `optionAnyType` => 2
} //1