【发布时间】:2016-02-08 21:45:29
【问题描述】:
我最近遇到了 scala.reflect.runtime API 并尝试通过 Stringevaluation 生成 Classdefinitins。 这是我在 scala REPL 中提出的方法:
scala> import scala.reflect.runtime._
import scala.reflect.runtime._
scala> val cm = universe.runtimeMirror(getClass.getClassLoader)
cm: reflect.runtime.universe.Mirror = JavaMirror with scala.tools.n[....]
scala> import scala.tools.reflect.ToolBox
import scala.tools.reflect.ToolBox
scala> val tb = cm.mkToolBox()
tb: scala.tools.reflect.ToolBox[reflect.runtime.universe.type] = scala.to[...]
scala> tb.eval(tb.parse("class A; scala.reflect.classTag[A].runtimeClass"))
res0: Any = class __wrapper$1$c6a9fb3f39c2499a9ff6e29384816f58.__wrapper$[...]
由于 REPL 的答案不是:
定义A类
但是
res0: 任何 = 类 __wrapper$1$c6a9fb3f39c2499a9ff6e29384816f58.__wrapper$[...]
我开始怀疑我是否真的创建了一个类或者只是初始化了一个抽象的 Any 实例? 我曾经在 scala 中读到过,一切都是对象。如果我的 REPL 中的 res0 现在实际上包含一个类,那么这意味着即使类也是 scala 中的对象?但这是我找不到更多输入的地方,所以我真的很困惑。 如果类不是 scala 中的对象,那么此时 res0 实际持有什么? 提前感谢您的帮助。
【问题讨论】:
-
我已经在EntryLevelDevs Question 中寻找过类似的问题,但我的具体问题没有得到解答。它通常只关于作为对象的函数......
-
是的,类就是对象。
标签: scala class oop reflection