我有一个名为
的名单val types : List[runtime.universe.Type]
现在我想将types(j)
与任何类型的Option
相匹配。
像这样,
if(types(j) =:= typeOf[Option[AnyVal]]) {
我试过
typeOf[Option[_]], typeOf[Option[Any]]
但这些都不匹配。
如何匹配?
答案 0 :(得分:2)
您可以使用typeSymbol
将Option
与任何类型相匹配。如果您想要完全匹配,例如只需匹配==
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]]) {