在Julia中将变量名称另存为字符串

lar*_*ara 6 string macros julia

在朱莉娅0.4我有一个名为variablex的变量

in:   variablex  = 6
out:  6
in:   typeof(variablex)
out:  Int64
Run Code Online (Sandbox Code Playgroud)

我想将变量的名称保存为字符串,所以我想最终得到类似下面的变量'a'的东西,它将变量'variablex'的名称存储为字符串.

in:  a = Name(variablex)
out: variablex
in:  typeof(a)
out: ASCIIString
Run Code Online (Sandbox Code Playgroud)

在上面的例子中,我刚刚编写了函数'Name',它将变量的名称作为字符串返回.Julia中是否存在与上面的虚构示例函数"Name"相同的功能?

Mic*_*gge 11

您可以使用这样的宏:

macro Name(arg)
   string(arg)
end

variablex  = 6

a = @Name(variablex)

julia> a
"variablex"
Run Code Online (Sandbox Code Playgroud)

信用(和更多细节):这个问答.

编辑:更多细节/说明:来自Julia 文档:

宏将接收它们的参数作为表达式,文字或符号

因此,如果我们尝试使用函数(而不是宏)创建相同的效果,我们就会遇到问题,因为函数会将其参数作为对象接收.但是,对于宏,variablex(在此示例中)作为符号传递(例如,相当于输入:variablex).并且,该string()函数可以作用于符号,将其转换为字符串.

在简短版本中,您可以将符号视为一种非常特殊的字符串类型,它绑定并引用特定对象.再次从Julia 文档中:

符号是实习字符串标识符

因此,我们利用了这样一个事实:在Julia的基本代码中,宏的设置已经为我们提供了一种准备好的方法来获取与给定变量相关联的符号(通过将该变量作为参数传递给宏),然后采取由于符号是一种特殊类型的字符串,因此将它们转换为更标准类型的字符串是相对简单的.

有关朱莉娅中符号的更详细分析,请参阅这个着名的SO问题:朱莉娅的"符号"是什么?

有关宏的更多信息,请参阅此SO问题:在Julia中,为什么@printf是宏而不是函数?