我试图在 Julia 中创建一个字符串文字宏来创建一个symbol,所以它s"x"与:x. 这是行不通的:
julia> macro s_str(p)
symbol(p)
end
julia> s'x'
ERROR: s not defined
julia> s"x"
ERROR: x not defined
Run Code Online (Sandbox Code Playgroud) 我想弄清楚如何有一个报价块,在评估时,返回一个符号.请参阅下面的示例.
function func(symbol::Symbol)
quote
z = $symbol
symbol
end
end
a = 1
eval(func(:a)) #this returns :symbol. I would like it to return :a
z
Run Code Online (Sandbox Code Playgroud) 我有一个Julia函数,它接受一些输入参数并使用它们来执行多个操作.为了使其中一个操作正常工作,我需要能够计算与用户输入匹配的符号.例如,函数看起来像这样:
function func(arg1,arg2)
symb_arg1 = ## get the symbol for input into arg1
symb_arg2 = ## get the symbol for input into arg2
println(symb_arg1)
println(symb_arg2)
## Do some operations using arg1, arg2, symb_arg1, symb_arg1
end
Run Code Online (Sandbox Code Playgroud)
我希望实现以下行为:
a = 25
b = rand(27,55,18)
func(a,b) ## prints :a and :b
Run Code Online (Sandbox Code Playgroud)
这里的困难是让函数计算包含变量实际名称的符号,而不是变量的值.这篇文章提供了以下几乎可以实现我想要的宏:
macro mymacro(ex)
Expr(:quote,ex) # this creates an expression that looks like :(:(x + 2))
end
Run Code Online (Sandbox Code Playgroud)
此宏适用于执行以下操作:
a = rand(27,15)
symb_a = @mymacro(a) ## prints :a
Run Code Online (Sandbox Code Playgroud)
但是,在我的函数中使用此宏将不会产生所需的效果.具体来说,如果我将我的函数定义为:
function func_bad(arg1,arg2)
symb_arg1 …Run Code Online (Sandbox Code Playgroud)