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

时间:2012-08-06 20:23:29

标签: scala reflection 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

找出方法是否具有隐式参数(在scala 2.10-M4 +中)的最佳方法是什么?

2 个答案:

答案 0 :(得分: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方法提供了更好的封装。

答案 1 :(得分:2)

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