2012-08-06 75 views
2

由於反射方法:是隱式的方法參數嗎? - 使用Scala的2.10反射

scala> val sortMethod = typeOf[::[_]].member(newTermName("sorted")) 
sortMethod: reflect.runtime.universe.Symbol = method sorted 

scala> sortMethod.typeSignature 
res122: reflect.runtime.universe.Type = [B >: A](implicit ord: scala.math.Ordering[B])Repr 

什麼是找出是否該方法具有隱含參數(在斯卡拉2.10-M4 +)的最好方法?

回答

2

現在,我不認爲你可以。 isImplicitadded 6 days ago,所以你應該可以在每晚構建或在下一個里程碑版本中使用。

6
scala> import scala.reflect.runtime.universe._ 
import scala.reflect.runtime.universe._ 

scala> val sortMethod = typeOf[::[_]].member(newTermName("sorted")).asMethod 
sortMethod: reflect.runtime.universe.MethodSymbol = method sorted 

scala> sortMethod.params // `params` has been added only a few days ago 
res0: List[List[reflect.runtime.universe.Symbol]] = List(List(value ord)) 

scala> sortMethod.params(0)(0).asTerm.isImplicit 
res2: Boolean = true 

scala> sortMethod.params(0)(0) hasFlag Flag.IMPLICIT 
res3: Boolean = true 

如果你問我以什麼方式選擇,我建議用isXXX方法。首先,這是一種一致的測試方式,因爲只有十幾個公共標誌,但還有很多東西需要測試(例如isStableisSynthetic)。其次,標誌比它們看上去更復雜(例如,幾個標誌名稱可能對應於標誌掩碼中的相同位),所以isXXX方法提供了更好的封裝。

相關問題