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

String 在Julia中将变量名另存为字符串,string,macros,julia,String,Macros,Julia,在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 在上面的示例中,我刚刚编写了函数

在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”相同?

您可以使用如下宏:

macro Name(arg)
   string(arg)
end

variablex  = 6

a = @Name(variablex)

julia> a
"variablex"
信用卡(以及更多细节):所以问答

编辑:更多详细信息/解释:摘自Julia:

宏以表达式、文字或符号的形式接收其参数

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

简而言之,您可以将符号视为绑定到并引用特定对象的一种非常特殊的字符串类型。又一次来自朱莉娅:

符号是插入的字符串标识符

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

有关Julia中符号的更详细分析,请参见以下著名问题:


有关宏的更多信息,请参阅此SO问题:

对于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

你能解释一下这是怎么回事吗。这里使用什么函数来获取名称?例如,如果我没有创建宏,只是尝试使用字符串(variablex),我只是将其值作为字符串获取,那么上面哪一部分给出了它的名称而不是它的值?@user3061923我在一个简单的测试用例上没有我尝试过的问题。由于您描述的问题与您发布的原始问题不同(与您在该问题中给出的可复制代码不同),因此我建议创建一个新问题,指定新问题,并给出一个可复制的代码片段,就像你在原来的函数中所做的那样,如果我想在一个函数中使用这个宏来处理一个传入函数的变量,它似乎不起作用。例如,函数是函数ret(variable)println(variable)varname=@Name(variable)return varname end,当我使用它时:in:tree=6;in:ret(tree)out:varname=variable,而不是预期的varname=tree。很抱歉,我在您发布回复时编辑了我的评论。如果您阅读了编辑后的评论后仍然有相同的感觉,请告诉我,我会按照您的建议去做。@user3061923好的,我明白您的意思了。是的,我建议作为一个单独的问题来问。但首先,请看一看我在回答中提到的问题,因为它似乎在问与你几乎完全相同的问题。如果您对此有疑问,或者遇到了实现问题,那么您可以专门针对这些问题定制您的问题,这样就不会将其标记为重复。