Ich möchte in der Lage sein, einen String-Ausdruck, z. "2.0 * x * log (x)", zu einer Funktion in Julia. Der üblicher Weg, um den Wert von „x“ passieren zu tun, würde durch globale Variablen sein:In Julia, ist es möglich, Werte für die Auswertung in einem Expr-Objekt ohne globale Variablen zu übergeben?
julia> func1 = parse("2.0*x*log(x)");
julia> x = 2.718281828459;
julia> eval(func1)/2.0
2.7182818284589545
Allerdings würde Ich mag wissen, ob ich globale Variablen vermeiden kann. Ich habe die folgenden zwei Methoden versucht, war aber nicht erfolgreich:
Methode 1
julia> func2(x) = parse("2.0*x*log(x)");
julia> eval(func2(1.0))/2.0 # should return zero
2.7182818284589545
Methode 2
julia> function new_func1(input_value)
x = input_value
eval(func1)
end
new_func1 (generic function with 1 method)
julia> new_func1(1.0)/2.0 # should return zero
2.7182818284589545
Wie wärs mit einem String-Makro und einer anonymen Funktion. 'Makro z_str (x) esc (Parse (x)) Ende func = x -> p "2,0 * x * log (x)" func (1.0)' –
Oder nehme 'funcstring =" 2.0 * x * log (x) "', dann 'eval (parse (" func1 (x) = $ funcstring "))' wird 'func1' definieren mit' func1 (1.0) == 0.0' –
Danke für die Eingaben - all von diesen Arbeiten, wie die Antworten unten tun. Ich erkannte auch, dass es auch möglich ist, "@generated" zu verwenden. – nathanielng