2017-04-16 75 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]]))