gpt4 book ai didi

scala - 在运行时获取 Scala 变量名

转载 作者:行者123 更新时间:2023-12-04 01:31:13 24 4
gpt4 key购买 nike

是否可以在运行时获取 scala 变量的名称?

例如。是否可以编写函数 getIntVarName(variable: Int): String行为如下?

val myInt = 3
assert("myInt" === getIntVarName(myInt))

最佳答案

对于您需要做的事情,在我看来,运行时不是必需的,因为您已经在编译时定义了 myInt 变量。如果是这种情况,您只需要通过宏进行一些 AST 操作。

尝试

package com.natalinobusa.macros

import scala.language.experimental.macros
import scala.reflect.macros.blackbox.Context

object Macros {

// write macros here
def getName(x: Any): String = macro impl

def impl(c: Context)(x: c.Tree): c.Tree = {
import c.universe._
val p = x match {
case Select(_, TermName(s)) => s
case _ => ""
}
q"$p"
}
}

请注意,宏必须编译为单独的子项目,并且不能是必须应用宏替换的同一项目的一部分。检查这个模板如何定义这样一个宏子项目: https://github.com/echojc/scala-macro-template
scala> import Macros._
import Macros._

scala> val myInt = 3
myInt: Int = 3

scala> "myInt" == getName(myInt)
res6: Boolean = true

关于scala - 在运行时获取 Scala 变量名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5050682/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com