建立表示式

有許多不同的方法可用於建立相同型別的表示式。該表示式的介紹中提到的:() 語法。也許最好的起點是絃樂。這有助於揭示 Julia 中表示式和字串之間的一些基本相似之處。

從 String 建立表示式

來自 Julia 文件

每個 Julia 程式都以字串開頭

換句話說,任何 Julia 指令碼都只是寫在一個文字檔案中,這只是一串字元。同樣,輸入直譯器的任何 Julia 命令只是一串字元。Julia 或任何其他程式語言的作用是以邏輯,可預測的方式解釋和評估字串,以便這些字串可用於描述程式設計師希望計算機完成的任務。

因此,建立表示式的一種方法是使用應用於字串的 parse() 函式。下面的表示式一旦被計算,就會將值 2 賦給符號 x

MyStr = "x = 2"
MyExpr = parse(MyStr)
julia> x
ERROR: UndefVarError: x not defined
eval(MyExpr)
julia> x
2

使用:() 語法建立表示式

MyExpr2 = :(x = 2)
julia> MyExpr == MyExpr2
true

請注意,使用此語法,Julia 會自動將物件的名稱視為符號。如果我們看一下表示式的 args,我們可以看到這一點。 (有關表示式中 args 欄位的更多詳細資訊,請參閱表示式物件的欄位。)

julia> MyExpr2.args
2-element Array{Any,1}:
  :x
 2  

使用 Expr() 函式建立表示式

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

此語法基於字首表示法 。換句話說,Expr() 函式指定的第一個引數是 head 或字首。剩下的就是表達的 argumentshead 確定將對引數執行哪些操作。

有關詳細資訊,請參閱表示式物件的欄位

使用此語法時,區分使用物件的物件和符號很重要。例如,在上面的例子中,表示式將 2 的值賦給符號:x,這是一個完全合理的操作。如果我們在這樣的表示式中使用 x 本身,我們將得到無意義的結果:

julia> Expr(:(=), x, 5)
:(2 = 5)

同樣,如果我們檢查 args,我們會看到:

julia> Expr(:(=), x, 5).args
2-element Array{Any,1}:
 2
 5

因此,Expr() 函式不會像建立表示式的:() 語法那樣執行相同的自動變換。

使用 quote...end 建立多行表示式

MyQuote = 
quote
    x = 2
    y = 3
end
julia> typeof(MyQuote)
Expr

請注意,使用 quote...end,我們可以在 args 欄位中建立包含其他表示式的表示式:

julia> typeof(MyQuote.args[2])
Expr

有關此 args 欄位的更多資訊,請參見表示式物件的欄位。

有關建立表示式的更多資訊

此示例僅提供了建立表示式的基礎知識。有關建立更復雜和高階表示式的更多資訊,另請參見插值和表示式以及表示式物件的欄位