$
è il comando di interpolazione, Julia utilizzare questa notazione di interpolare le stringhe così come Expression:
julia> a=1;
julia> "test $a" # => "test 1"
julia> :(b+$a) # => :(b + 1)
Quando si digita un comando in Julia REPL, si cerca di valuta il comando e se il codice non si avere ;
char alla fine stampa il risultato, quindi è più relativo alle funzioni di stampa, che a quello che verrà visualizzato su REPL, quando viene eseguito un comando.
quindi se volete vedere i veri contenuti di una sola possibilità variabile è quello di utilizzare dump
funzione:
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
E 'chiaro dalle prove di cui sopra, che le due espressioni utilizzano una struttura dati comune Expr
con head
, args
e typ
senza alcun $
all'interno di.
Ora provate a valutare e risultato di stampa:
julia> :(a in b)
:($(Expr(:in, :a, :b)))
julia> :(a+b)
:(a + b)
Sappiamo già che sia comando Crea una stessa struttura, ma REPL non in grado di mostrare il risultato di :(a in b)
meglio che un Expr
del risultato di un altro Expr
ed è il motivo per cui non ci in un $
all'interno. Ma quando si tratta di :(a+b)
, REPL fare in modo più intelligente e capisce che questo:
Expr
head: Symbol call
args: Array(Any,(3,))
1: Symbol +
2: Symbol a
3: Symbol b
typ: Any
è pari a :(a+b)
.
fonte
2015-11-03 09:03:23
Fare riferimento alla lingua di Julia ** Metaprogramming ** documentazione: http://docs.julialang.org/en/latest/manual/metaprogramming – SalchiPapa