julia 生成带有符号的表达式
julia generate expression with symbol in it
我需要生成一个 call
Expr,其中一个关键字参数是一个符号。我可以像这样明确地输入它:
julia> dump(:(func(something; a=:b)))
Expr
head: Symbol call
args: Array{Any}((3,))
1: Symbol func
2: Expr
head: Symbol parameters
args: Array{Any}((1,))
1: Expr
head: Symbol kw
args: Array{Any}((2,))
1: Symbol a
2: QuoteNode
value: Symbol b
3: Symbol something
注意设置为符号 :b
的关键字参数 a
我想做的是以编程方式生成此表达式,其中 :b
部分是从某个变量内插的,例如 x
.
我试过了
julia> x = :u
:u
julia> dump(:(func(something; a=$(x))))
Expr
head: Symbol call
args: Array{Any}((3,))
1: Symbol func
2: Expr
head: Symbol parameters
args: Array{Any}((1,))
1: Expr
head: Symbol kw
args: Array{Any}((2,))
1: Symbol a
2: Symbol u
3: Symbol something
但我没有得到一个值为 Symbol u
的 QuoteNode
,而是得到了符号 u。这将不起作用,因为当我评估表达式时,它会查找变量 u
但它应该只是插入 Symbol u
。我已经尝试了一些其他的东西,但无法让它发挥作用。
谢谢
您可以手动将 x
包装在 QuoteNode
中或使用 Meta.quot
(生成 Expr(:quote, ...)
):
julia> x = :u;
julia> dump(:(func(something; a=$(QuoteNode(x)))))
Expr
head: Symbol call
args: Array{Any}((3,))
1: Symbol func
2: Expr
head: Symbol parameters
args: Array{Any}((1,))
1: Expr
head: Symbol kw
args: Array{Any}((2,))
1: Symbol a
2: QuoteNode
value: Symbol u
3: Symbol something
julia> func(x; a) = x, a
func (generic function with 1 method)
julia> eval(:(func(something; a=$(QuoteNode(x)))))
(something, :u)
julia> eval(:(func(something; a=$(Meta.quot(x)))))
(something, :u)
我需要生成一个 call
Expr,其中一个关键字参数是一个符号。我可以像这样明确地输入它:
julia> dump(:(func(something; a=:b)))
Expr
head: Symbol call
args: Array{Any}((3,))
1: Symbol func
2: Expr
head: Symbol parameters
args: Array{Any}((1,))
1: Expr
head: Symbol kw
args: Array{Any}((2,))
1: Symbol a
2: QuoteNode
value: Symbol b
3: Symbol something
注意设置为符号 :b
a
我想做的是以编程方式生成此表达式,其中 :b
部分是从某个变量内插的,例如 x
.
我试过了
julia> x = :u
:u
julia> dump(:(func(something; a=$(x))))
Expr
head: Symbol call
args: Array{Any}((3,))
1: Symbol func
2: Expr
head: Symbol parameters
args: Array{Any}((1,))
1: Expr
head: Symbol kw
args: Array{Any}((2,))
1: Symbol a
2: Symbol u
3: Symbol something
但我没有得到一个值为 Symbol u
的 QuoteNode
,而是得到了符号 u。这将不起作用,因为当我评估表达式时,它会查找变量 u
但它应该只是插入 Symbol u
。我已经尝试了一些其他的东西,但无法让它发挥作用。
谢谢
您可以手动将 x
包装在 QuoteNode
中或使用 Meta.quot
(生成 Expr(:quote, ...)
):
julia> x = :u;
julia> dump(:(func(something; a=$(QuoteNode(x)))))
Expr
head: Symbol call
args: Array{Any}((3,))
1: Symbol func
2: Expr
head: Symbol parameters
args: Array{Any}((1,))
1: Expr
head: Symbol kw
args: Array{Any}((2,))
1: Symbol a
2: QuoteNode
value: Symbol u
3: Symbol something
julia> func(x; a) = x, a
func (generic function with 1 method)
julia> eval(:(func(something; a=$(QuoteNode(x)))))
(something, :u)
julia> eval(:(func(something; a=$(Meta.quot(x)))))
(something, :u)