Bab-bab sing dakanggep mbingungake babagan sintaksis julia
Julia parses sintaks sawijining meh kaya lisp. Nanging sintaksis ora kaya s-exprs dadi kudu nangani konteks sing beda-beda ... ayo deleng:
Simbol ing julia:
typeof(:abc)
# Symbol
Uga simbol:
typeof(:(abc))
# Symbol
Ora simbol:
typeof(:(abc isa Symbol))
# Expr
Dadi sawise sawetara spasi dadi ekspresi, utawa a dhaptar.
Nanging ing:()
notasi yaiku ora ngutip . Ekspresi isih valid kode julia. Nyatane:
typeof(esc(:(abc def)))
# ERROR: syntax: missing comma or ) in argument list
Wiwitabc def
ora bener kode julia. Dadi ing:()
notasi luwih kaya lisp(read '(...))
. Where kita instrument compiler kanggo maca kode sing dipetik.
Sampeyan pengin mung ngutip barang? Sampeyan ora bisa ngutip ekspresi lengkap, nanging sampeyan bisa ngutip simbol:
typeof(QuoteNode(:abc))
# QuoteNode
Ngendi iki digunakake ing umum? Kanggo menehi hasil karo ambiguities antarane kaiket simbol lan simbol literal. Simbol terikat yaiku variabel, fungsi, modul:
m = :Main
eval(:(typeof($m)))
# Module
Apa yen kita wanted ing:Main
simbol?
eval(:(typeof($(QuoteNode(m)))))
# Symbol
Aja diapusi deningquote ... end
sintaksis. Iku ora aQuoteNode
:
typeof(quote abc end)
# Expr
Iki minangka ekspresi multi-line kaya:()
, kayabegin ... end
.
Mungkin julia bisa luwih praktis minangka lisp ing ngendi sampeyan mung ngliwati dhaptar sing dipetik'(...)
kanthi nduwe sesuatu sing luwih apik tinimbang senar:
eval(Base.Meta.parse("abc def"))
ora ngerti.