【问题标题】:In Scala Reflection, is the compile time universe accessible?在 Scala 反射中,编译时宇宙是否可访问?
【发布时间】:2016-06-05 12:10:02
【问题描述】:

在本文档中:

http://docs.scala-lang.org/overviews/reflection/environment-universes-mirrors.html

Scala 反射宇宙被描述为具有 2 个实现:1 个用于运行时(在 scala.reflect.runtime 下),1 个用于编译时(在 scala.reflect.macro 下)。

但是,我只能通过以下方式访问运行时 Universe:

scala.reflect.runtime.universe

编译时 Universe 包下没有具体的实现。实现和调用它的能力是否故意隐藏,实现由 scala 编译器硬编码?如果是这样,那么在使用 Scala 反射之前强制指定一个 Universe 的原因是什么?

非常感谢您的任何见解。

【问题讨论】:

  • 您可以通过从上下文导入宏实现来访问某些编译时 Universe,例如def macroImpl(c: whitebox.Context)(arg: c.Tree) = { import c.universe._; /* other code */ }

标签: scala scala-reflect


【解决方案1】:

在使用 Scala 反射之前强制指定 Universe 的原因是什么?

因为 Scala 中的宏依赖于上下文,并且每个宏的 Universe 导入都会在上下文中传递。

【讨论】:

    猜你喜欢
    • 2016-09-18
    • 2020-01-19
    • 1970-01-01
    • 2016-02-14
    • 1970-01-01
    • 1970-01-01
    • 2011-01-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多