Julia 从字符串创建函数

k1n*_*ext 3 metaprogramming julia

在 Julia v1.01 中,我想从字符串创建一个函数。

背景:在数值求解器中,测试用例是通过 JSON 文件定义的。如果用户可以以字符串形式指定初始条件,那就太好了。

这会导致以下情况:假设我们有(来自 JSON 文件)

fcn_as_string = "sin.(2*pi*x)" 
Run Code Online (Sandbox Code Playgroud)

有没有办法将其转换为function fcn我可以调用的

fcn(1.0) # = sin.(2*pi*1.0)
Run Code Online (Sandbox Code Playgroud)

性能并不是真正的问题,因为初始条件被评估一次,然后实际计算消耗了大部分时间。

小智 5

无法在评论中正确显示我的代码,因此这里是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
Run Code Online (Sandbox Code Playgroud)