$
ist die Interpolation Befehl, Julia diese Notation verwenden Strings als Ausdruck als auch zu interpolieren:
julia> a=1;
julia> "test $a" # => "test 1"
julia> :(b+$a) # => :(b + 1)
Wenn Sie einen Befehl in Julia REPL geben, versucht er den Befehl auswertet und wenn der Code nicht have ;
char am Ende druckt das Ergebnis, so ist es mehr mit Druckfunktionen, dass was auf REPL gesehen wird, wenn ein Befehl ausgeführt wird.
so, wenn Sie den wirklichen Inhalt einer Variablen einer Möglichkeit sehen wollen, ist dump
Funktion zu verwenden:
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
Es ist klar, von oben Tests, dass beide Ausdrücke eine gemeinsame Datenstruktur von Expr
mit head
, args
verwenden und typ
ohne $
innerhalb.
Jetzt versuchen und Ergebnisdruck zu bewerten:
julia> :(a in b)
:($(Expr(:in, :a, :b)))
julia> :(a+b)
:(a + b)
Wir wissen bereits, dass beide die gleiche Struktur erstellen Befehl aber REPL kann das Ergebnis des :(a in b)
besser nicht zeigen, dass ein Expr
von Ergebnis einer anderen Expr
und es ist, warum es in einem $
innen. Aber wenn sie mit :(a+b)
tun haben, tun REPL intelligenter und versteht, dass dies:
Expr
head: Symbol call
args: Array(Any,(3,))
1: Symbol +
2: Symbol a
3: Symbol b
typ: Any
zu :(a+b)
gleich ist.
Bitte beachten Sie die Julia Sprache ** Metaprogrammierung ** Dokumentation: http://docs.juliallang.org/en/latest/manual/metaprogramming – SalchiPapa