Es ist möglich, die Einführung neuer Variablen in die globalen Umfang mit eval
mit:
julia> x = 1
1
julia> function testeval()
eval(:(x = 5))
return x
end
testeval (generic function with 1 method)
julia> testeval()
5
julia> x # the global x has changed!
5
Eine extract
Funktion könnte wie folgt aussehen:
julia> function extract(d)
expr = quote end
for (k, v) in d
push!(expr.args, :($(Symbol(k)) = $v))
end
eval(expr)
return
end
julia> extract(d)
julia> key1, key2, key3
(111,222,333)
Beachten Sie, dass jedes Modul seinen eigenen globalen Geltungsbereich hat. Daher führt dies die Variablen in den Umfang des Moduls ein, in dem die extract
-Funktion definiert ist, d. H. In das Main
-Modul, wenn es bei der REPL wie im Beispiel definiert ist.
Sie sollten sehr vorsichtig sein, wenn Sie eval
verwenden und zuerst andere Ansätze in Betracht ziehen, z. B. die von David P. Sanders und Dan Getz erwähnten.
Schauen Sie sich mauro3 Paket Parameter.jl (https://github.com/mauro3/Parameters.jl). Insbesondere ist das Entpacken eines Dict die Art, wie diese Operation beschrieben wird. –