表达对象的字段

正如表达式简介中所提到的,表达式是 Julia 中特定类型的对象。因此,他们有领域。表达式中最常用的两个字段是 headargs。例如,考虑表达式

MyExpr3 = Expr(:(=), :x, 2)

创建表达式中讨论。我们可以看到 headargs 如下:

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(),这可能是一个有用的工具,可以获得有关使用内容的提示和想法。