Gibt es einfache Julia-Syntax für die Zuweisung zu einer Variablen nur, wenn es nicht definiert ist (oder Falsy)? Ich meine etwas wie Rubys x ||= NEW_VALUE
. Ich habe versucht, x || x=NEW_VALUE
, aber es wirft einen Fehler. Abgesehen von der einfachen Syntax, mit welcher Funktion kann ich prüfen, ob eine Variable definiert ist?Nur zuweisen, wenn nicht bereits in Julia definiert
13
A
Antwort
24
Sie können die isdefined
Funktion verwenden: isdefined(:x) || (x = NEW_VALUE)
.
2
Ich habe ein Makro vorbereitet, um mit dieser kleinen Unannehmlichkeit umzugehen.
macro ifund(exp)
local e = :($exp)
isdefined(e.args[1]) ? :($(e.args[1])) : :($(esc(exp)))
end
dann in REPL:
julia> z
ERROR: UndefVarError: z not defined
julia> @ifund z=1
1
julia> z
1
julia> z=10
10
julia> @ifund z=2
10
julia> z
10
Ein Beispiel der Interpolation:
julia> w
ERROR: UndefVarError: w not defined
julia> w = "$(@ifund w="start:") end"
"start: end"
julia> w
"start: end"
Aber erinnern des Umfangs (y
in den Rahmen ist der for-Schleife):
julia> y
ERROR: UndefVarError: y not defined
julia> for i=1:10 y = "$(@ifund y="") $i" end
julia> y
ERROR: UndefVarError: y not defined
Lassen Ich weiß, ob es funktioniert. Ich bin neugierig, weil es meine erste Übung mit Makros ist.