Julia从字符串创建函数

时间:2018-11-02 14:31:59

标签: julia metaprogramming

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

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

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

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

有没有一种方法可以将其转换为function fcn以便我打电话给

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

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

2 个答案:

答案 0 :(得分:3)

无法在注释中正确显示我的代码,因此这是crstnbr's solution的快速解决方法

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

答案 1 :(得分:2)

函数Meta.parseeval允许您执行以下操作:

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

此返回-2.4492935982947064e-16(由于舍入错误)。

相关问题