2013-12-10 4 views
13

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

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.