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

时间:2016-08-17 01:21:01

标签: string macros julia

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

in:   variablex  = 6
out:  6
in:   typeof(variablex)
out:  Int64

我想将变量的名称保存为字符串,因此我想最终得到类似变量' a'下面是存储变量' variablex'的名称。作为一个字符串。

in:  a = Name(variablex)
out: variablex
in:  typeof(a)
out: ASCIIString

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

2 个答案:

答案 0 :(得分:9)

您可以使用这样的宏:

macro Name(arg)
   string(arg)
end

variablex  = 6

a = @Name(variablex)

julia> a
"variablex"

信用(以及更多详情):this SO Q& A。

编辑:更多细节/说明:来自朱莉娅documentation

  

宏将其参数作为表达式,文字或符号

接收

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

在简短版本中,您可以将符号视为一种非常特殊的字符串类型,它绑定并引用特定对象。再次来自朱莉娅documentation

  

符号是实习字符串标识符

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

有关Julia中符号的更详细分析,请参阅此着名的SO问题:What is a "symbol" in Julia?

有关宏的更多信息,请参阅此SO问题:In Julia, why is @printf a macro instead of a function?

答案 1 :(得分:0)

对于Julia 1.0及更高版本:

macro name(arg)
    x = string(arg)
    quote
        $x
    end
end

用法:

a = @name variablex #macro syntax
a = @name(variablex) #called as a function
相关问题