表达对象的字段
正如表达式简介中所提到的,表达式是 Julia 中特定类型的对象。因此,他们有领域。表达式中最常用的两个字段是 head
和 args
。例如,考虑表达式
MyExpr3 = Expr(:(=), :x, 2)
在创建表达式中讨论。我们可以看到 head
和 args
如下:
julia> MyExpr3.head
:(=)
julia> MyExpr3.args
2-element Array{Any,1}:
:x
2
表达式基于前缀表示法 。因此,head
通常指定要对 args
执行的操作。头必须是 Julia type Symbol
。
当一个表达式要赋值(当它被评估时),它通常会使用一个:(=)
的头。当然,可以采用明显的变化,例如:
ex1 = Expr(:(+=), :x, 2)
:呼吁表达头
表达的另一个常见的 head
是:call
。例如
ex2 = Expr(:call, :(*), 2, 3)
eval(ex2) ## 6
遵循前缀表示法的约定,运算符从左到右进行评估。因此,这里的表达式意味着我们将在后续元素上调用 args
的第一个元素上指定的函数。我们同样可以:
julia> ex2a = Expr(:call, :(-), 1, 2, 3)
:(1 - 2 - 3)
或者其他可能更有趣的功能,例如
julia> ex2b = Expr(:call, :rand, 2,2)
:(rand(2,2))
julia> eval(ex2b)
2x2 Array{Float64,2}:
0.429397 0.164478
0.104994 0.675745
使用:()
表达创建表示法自动确定 head
注意,在某些表达式结构中,:call
被隐含地用作头部,例如
julia> :(x + 2).head
:call
因此,使用:()
语法创建表达式,Julia 将寻求自动确定要使用的正确头部。同理:
julia> :(x = 2).head
:(=)
事实上,如果你不确定正在使用的表达式使用的正确头部,例如,Expr()
,这可能是一个有用的工具,可以获得有关使用内容的提示和想法。