Julia 显式表达式构造函数
根据标准函数名,Expr类型据说遵循以下简单结构:Julia 显式表达式构造函数,julia,Julia,根据标准函数名,Expr类型据说遵循以下简单结构: julia> names(Expr) 3-element Array{Symbol,1}: :head :args :typ 因此,我希望能够使用以下简单方法,从另一个Expr直接调用Expr构造函数来构建Expr: 但是结果exp2不包含与exp1相同的参数;Expr从exp1.args和exp1.typ生成新的args: julia> exp2.args 2-element Array{Any,1}: {:+,:x,
julia> names(Expr)
3-element Array{Symbol,1}:
:head
:args
:typ
因此,我希望能够使用以下简单方法,从另一个Expr直接调用Expr构造函数来构建Expr:
但是结果exp2不包含与exp1相同的参数;Expr从exp1.args和exp1.typ生成新的args:
julia> exp2.args
2-element Array{Any,1}:
{:+,:x,:y}
Any
vs
我做错了什么
编辑:
在的Varargs部分之后,还可以将iterable对象拼接到函数调用中。所以在我的例子中,它只是这样:
julia> Expr(:call,exp1.args...)
:(x+y)
Expr()
构造函数不会将输入直接映射到Expr类型的字段。相反,第一个输入成为head,其余的输入成为args。因此,要使用Expr构造函数构造表达式x+y
,您需要执行以下操作:
Expr(:call, :(+), :x, :y)
Expr()
构造函数不会将输入直接映射到Expr类型的字段。相反,第一个输入成为head,其余的输入成为args。因此,要使用Expr构造函数构造表达式x+y
,您需要执行以下操作:
Expr(:call, :(+), :x, :y)
:(+)相当于:+不是吗?是的,但在某些情况下,巴黎人更安全。不过我认为这对加号来说并不重要。如果你需要一个冒号,尽管你需要它们
:(:)
好的,我就是这么想的。读了茱莉亚的《象征的区别》后我有点怀疑。。也许Expr构造函数自2013年以来发生了变化:(+)相当于:+不是吗?是的,但在某些情况下,paren更安全。不过我认为这对加号来说并不重要。如果你需要一个冒号,尽管你需要它们:(:)
好的,我就是这么想的。读了茱莉亚的《象征的区别》后我有点怀疑。。也许Expr构造函数自2013年以来发生了变化?
Expr(:call, :(+), :x, :y)