【发布时间】:2012-11-01 21:01:30
【问题描述】:
我们能否使用函数f外部的反射获得val s: String的类型?
val f = (r: {val s: String}) => {
}
【问题讨论】:
-
在2.9或2.10以下还是没关系?
-
2.9 或 2.10 无关紧要。但我通常使用 2.9.2。
-
我非常怀疑在不使用编译器的情况下在 2.9 中是否可行。在 2.10 中,反射 api 可能允许检查
r的类型。 -
使用this info 我试图用 2.10.0-RC1 反映匿名函数如下,但坚持它擦除匿名函数参数的类型 - 这可能是一个错误,我会报告:
import reflect.runtime._, universe._; currentMirror.reflectClass(currentMirror.reflect(f).symbol).symbol.typeSignature.member(newTermName("apply")).asTerm.alternatives.map(_.typeSignature) -
这不是错误。
currentMirror.reflect(f)反映运行时值,因此它只能访问运行时类型信息,在编译过程中会被删除。
标签: scala reflection structural-typing