首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >获取Scala 3宏中的封闭模块

获取Scala 3宏中的封闭模块
EN

Stack Overflow用户
提问于 2021-10-05 12:27:49
回答 1查看 66关注 0票数 0

如何获取宏调用的封闭模块。

代码语言:javascript
复制
package foo.bar
class MyClass:
  val macroReturnValue = SomeMacro.macroCall("someExpression")
end MyClass

macroReturnValue应包含例如"foo.bar.MyClass"

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-10-06 18:28:42

试一试

代码语言:javascript
复制
import scala.quoted.*

object SomeMacro:
  inline def macroCall(s: String): String = ${macroCallImpl('s)}

  def macroCallImpl(s: Expr[String])(using Quotes): Expr[String] =
    import quotes.reflect.*
    def enclosingClass(symb: Symbol): Symbol = 
      if symb.isClassDef then symb else enclosingClass(symb.owner)
    val name = enclosingClass(Symbol.spliceOwner).fullName
    Literal(StringConstant(name)).asExprOf[String]
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69450459

复制
相关文章

相似问题

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