模式匹配带选项的runtime.universe.Type

时间:2017-04-16 12:17:18

标签: scala

我有一个名为

的名单
val types : List[runtime.universe.Type]

现在我想将types(j)与任何类型的Option相匹配。

像这样,

if(types(j) =:= typeOf[Option[AnyVal]]) {

我试过

typeOf[Option[_]], typeOf[Option[Any]]

但这些都不匹配。

如何匹配?

2 个答案:

答案 0 :(得分:2)

您可以使用typeSymbolOption与任何类型相匹配。如果您想要完全匹配,例如只需匹配==

,您也可以在某个类型上使用Option[Any]
import scala.reflect.runtime.{universe => ru}

val types = List(ru.typeOf[Option[String]], 
                 ru.typeOf[Option[Any]], 
                 ru.typeOf[String])

// matches any Option and prints true true false
types.foreach(t => println(t.typeSymbol == ru.typeOf[Option[_]].typeSymbol))

// matches only Option[Any] and prints false true false
types.foreach(t => println(t == ru.typeOf[Option[Any]]))

答案 1 :(得分:2)

=:=仅在两种类型相同时才匹配,例如Option[String]Option[Any]不等同。

您应该使用<:<代替:

if(types(j) <:< typeOf[Option[Any]]) {