•  ánh sáng không có thực

Julia nói ngọng

Những điều mà tôi thấy khó hiểu về cú pháp julia

Julia phân tích cú pháp của nó giống như nói ngọng. Tuy nhiên, cú pháp không hoàn toàn giống s-exprs nên phải xử lý các ngữ cảnh khác nhau...hãy xem:

Một biểu tượng trong julia:

typeof(:abc)
# Symbol

Cũng là một biểu tượng:

typeof(:(abc))
# Symbol

Không phải là một biểu tượng:

typeof(:(abc isa Symbol))
# Expr

Vì vậy, sau một số khoảng trắng, nó trở thành một biểu thức hoặc một danh sách.

Tuy nhiên các:() ký hiệu là không phải trích dẫn . Một biểu thức vẫn là mã julia hợp lệ. Trong thực tế:

typeof(esc(:(abc def)))
# ERROR: syntax: missing comma or ) in argument list

Từabc def không phải là mã julia hợp lệ. Nên:() ký hiệu giống như một lisp(read '(...)) . Nơi chúng tôi thiết bị trình biên dịch để đọc mã được trích dẫn.

Bạn chỉ muốn trích dẫn những điều? Chà, bạn không thể trích dẫn toàn bộ biểu thức, nhưng bạn có thể trích dẫn các ký hiệu:

typeof(QuoteNode(:abc))
# QuoteNode

Nơi này được sử dụng nói chung? Để đối phó với sự mơ hồ giữa ràng buộc ký hiệu và ký hiệu chữ. Các ký hiệu ràng buộc là các biến, hàm, mô-đun:

m = :Main
eval(:(typeof($m)))
# Module

Điều gì sẽ xảy ra nếu chúng ta muốn:Main Biểu tượng?

eval(:(typeof($(QuoteNode(m)))))
# Symbol

Đừng để bị lừa bởiquote ... end cú pháp. Nó không phải là mộtQuoteNode:

typeof(quote abc end)
# Expr

Nó là một biểu thức nhiều dòng như:() , giốngbegin ... end.

Có lẽ julia có thể thực tế hơn với tư cách là một người nói ngọng khi bạn chỉ cần chuyển các danh sách được trích dẫn xung quanh'(...) bằng cách có thứ gì đó tốt hơn chuỗi:

eval(Base.Meta.parse("abc def"))

không biết.

Thẻ bài: