Julia 从字符串创建函数

Julia create function from string

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

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

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

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

有没有办法把它转换成 function fcn 这样我就可以调用

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

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

函数 Meta.parseeval 允许您这样做:

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

这个return -2.4492935982947064e-16(由于舍入误差)。

无法在评论中正确显示我的代码,因此这里是

的快速修复
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