$
là lệnh nội suy, Julia sử dụng ký hiệu này để suy Strings cũng như Expression:
julia> a=1;
julia> "test $a" # => "test 1"
julia> :(b+$a) # => :(b + 1)
Khi bạn gõ một lệnh trong Julia REPL, nó cố gắng để đánh giá các lệnh và nếu mã không có ;
char ở cuối nó in kết quả, do đó, nó liên quan nhiều hơn đến các chức năng in ấn, rằng những gì sẽ được nhìn thấy trên REPL, khi một lệnh thực thi.
vì vậy nếu bạn muốn xem các nội dung thực sự của một một khả năng biến là sử dụng dump
chức năng:
julia> dump(:(a+b))
Expr
head: Symbol call
args: Array(Any,(3,))
1: Symbol +
2: Symbol a
3: Symbol b
typ: Any
julia> dump(:(a in b))
Expr
head: Symbol in
args: Array(Any,(2,))
1: Symbol a
2: Symbol b
typ: Any
Rõ ràng từ các xét nghiệm trên, rằng cả hai biểu thức sử dụng một cấu trúc dữ liệu phổ biến của Expr
với head
, args
và typ
mà không cần bất kỳ $
bên trong.
Bây giờ hãy thử để đánh giá và kết quả in:
julia> :(a in b)
:($(Expr(:in, :a, :b)))
julia> :(a+b)
:(a + b)
Chúng tôi đã biết rằng cả hai lệnh tạo ra một cấu trúc tương tự nhưng REPL không thể hiển thị kết quả của :(a in b)
tốt hơn mà một Expr
kết quả của Expr
khác và đó là lý do tại sao có trong một số $
bên trong. Nhưng khi giao dịch với :(a+b)
, REPL làm thông minh hơn và hiểu rằng đây:
Expr
head: Symbol call
args: Array(Any,(3,))
1: Symbol +
2: Symbol a
3: Symbol b
typ: Any
bằng :(a+b)
.
Nguồn
2015-11-03 09:03:23
Vui lòng tham khảo ngôn ngữ Julia ** Tài liệu lập trình meta **: http://docs.julialang.org/en/latest/manual/metaprogramming – SalchiPapa