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