Юлия создать функцию из строки - PullRequest
0 голосов
/ 02 ноября 2018

В Julia v1.01 я хотел бы создать функцию из строки.

Справочная информация. В числовом решателе тестовый набор определяется с помощью файла JSON. Было бы здорово, если бы пользователь мог указать начальное условие в виде строки.

Это приводит к следующей ситуации: Предположим, что мы имеем (из файла JSON)

fcn_as_string = "sin.(2*pi*x)" 

Есть ли способ преобразовать это в function fcn, чтобы я мог позвонить

fcn(1.0) # = sin.(2*pi*1.0)

Производительность на самом деле не является проблемой, поскольку начальное условие оценивается один раз, а затем фактические вычисления занимают большую часть времени.

Ответы [ 2 ]

0 голосов
/ 03 ноября 2018

Не удается правильно отобразить мой код в комментарии, поэтому вот быстрое решение для решения crstnbr

function fcnFromString(s)
    f = eval(Meta.parse("x -> " * s))
    return x -> Base.invokelatest(f, x)
end

function main()
    s = "sin.(2*pi*x)"
    f = fcnFromString(s)
    f(1.)
end

julia> main()
-2.4492935982947064e-16
0 голосов
/ 02 ноября 2018

Функции Meta.parse и eval позволяют вам сделать это:

fcn_as_string = "sin.(2*pi*x)" 
fcn = eval(Meta.parse("x -> " * fcn_as_string))
@show fcn(1.0)

Это возвращение -2.4492935982947064e-16 (из-за ошибок округления).

...