此脚本使用反射来找到一个构造函数的类型签名。 它包含一个对象中,并在顶层相同的代码:
// Scala 2.11.1
case class Dirigible(cubicFeet: Int)
object Object {
val u = scala.reflect.runtime.universe
val ctor = u.weakTypeOf[Dirigible].decl(u.termNames.CONSTRUCTOR).typeSignature
def run() {
println(ctor)
}
}
Object.run()
val u = scala.reflect.runtime.universe
val ctor = u.weakTypeOf[Dirigible].decl(u.termNames.CONSTRUCTOR).typeSignature
println(ctor)
下面是输出:
(cubicFeet: Int)$anon.this.Dirigible
<notype>
为什么顶级代码失败而里面的代码Object
的作品?
如果我把发生同样的故障println
顶层内def
和从顶层调用它。
如果我通过运行在REPL文件中的顶级代码工作scala -i refltest.scala
。 这是可以预料的,因为REPL把一切都变成一个对象。 我不明白的是,为什么代码的对象内的存在会影响反射的结果吗?