在Julia v1.01中,我想从字符串创建函数。
背景:在数值求解器中,通过JSON文件定义了一个测试用例。如果用户可以以字符串形式指定初始条件,那就太好了。
这导致以下情况:假设我们有(来自JSON文件)
fcn_as_string = "sin.(2*pi*x)"
有没有一种方法可以将其转换为function fcn
以便我打电话给
fcn(1.0) # = sin.(2*pi*1.0)
性能并不是真正的问题,因为对初始条件进行一次评估,然后实际计算会消耗大部分时间。
答案 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.parse
和eval
允许您执行以下操作:
fcn_as_string = "sin.(2*pi*x)"
fcn = eval(Meta.parse("x -> " * fcn_as_string))
@show fcn(1.0)
此返回-2.4492935982947064e-16(由于舍入错误)。