是隐式的方法参数吗? - 使用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 +)的最好方法?
答
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
方法。首先,这是一种一致的测试方式,因为只有十几个公共标志,但还有很多东西需要测试(例如isStable
或isSynthetic
)。其次,标志比它们看上去更复杂(例如,几个标志名称可能对应于标志掩码中的相同位),所以isXXX
方法提供了更好的封装。