是隐式的方法参数吗? - 使用Scala的2.10反射

问题描述:

由于反射方法:是隐式的方法参数吗? - 使用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 +)的最好方法?

现在,我不认为你可以。 isImplicitadded 6 days ago,所以你应该可以在每晚构建或在下一个里程碑版本中使用。

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方法提供了更好的封装。