表達物件的欄位

正如表示式簡介中所提到的,表示式是 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(),這可能是一個有用的工具,可以獲得有關使用內容的提示和想法。