首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过ModuleMirror定义的scala对象的ToolBox

通过ModuleMirror定义的scala对象的ToolBox
EN

Stack Overflow用户
提问于 2014-01-22 03:34:43
回答 1查看 258关注 0票数 0

我试图通过向ToolBox提供一个字符串来定义Scala对象,但是我无法找到获得结果ModuleMirror句柄的方法。我想它应该类似于下面的内容,但是我似乎无法从RuntimeClass的结果中得到ToolBox:

代码语言:javascript
复制
import scala.reflect.runtime._
import scala.reflect.runtime.universe._
import scala.tools.reflect.ToolBox

val src = """ object MyObject { def hello() = "world" } """

val mirror = universe.runtimeMirror(getClass.getClassLoader)

val toolBox = mirror.mkToolBox()
val tree = toolBox.parse(src)
val value = toolBox.eval(tree)

// convert from result of eval to RuntimeClass...?
val runtimeClass: RuntimeClass = ???

val moduleSymbol = mirror.moduleSymbol(runtimeClass)

val moduleMirror = mirror.reflectModule(moduleSymbol.asModule)

有什么建议吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-01-22 12:32:54

获取对象类的最佳方法可能是从正在编译的代码块返回MyObject.getClass

但是,对结果类调用moduleSymbol将导致NoSymbol,因为Scala反射当前不支持本地对象。为什么是本地物体?因为eval将输入给它的代码包装在一个方法中以启用其计算,这意味着MyObject最终将是包装器方法的本地代码。为什么目前不支持?这是因为Scala反射依赖于携带Scala特定元数据的@ScalaSignature注释,而且这些注释目前还没有保存到本地定义中。

我认为有可能将ToolBox.compile (eval的一个未评估的对应项)更改为顶级定义的特殊情况处理,以便它们最终不会被编译为本地定义。你能把一个问题提交给我们的问题跟踪器,这样我们就不会忘记修复它?

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21273678

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档