2017-04-16 40 views
0

匹配runtime.universe.Type我有一个列表,名为模式与期权

val types : List[runtime.universe.Type] 

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

这样,

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

我试图

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

但这些都不是匹配的。

如何搭配?

回答

1

=:=比赛匹配,只有当这两个类型是等价的精确匹配,和,如Option[String]Option[Any]不等价。

您应该使用<:<代替:

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

但是,这将是'一些[任何]','None.type','Nothing',不只是 “任何类型的选项” 真。 –

+0

这是真的。如果仅限于Option,则为测试添加'下限':if((types(j)<: PH88

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]]))