建立表示式
有許多不同的方法可用於建立相同型別的表示式。該表示式的介紹中提到的:()
語法。也許最好的起點是絃樂。這有助於揭示 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
或字首。剩下的就是表達的 arguments
。head
確定將對引數執行哪些操作。
有關詳細資訊,請參閱表示式物件的欄位
使用此語法時,區分使用物件的物件和符號很重要。例如,在上面的例子中,表示式將 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
欄位的更多資訊,請參見表示式物件的欄位。