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)
| 归档时间: |
|
| 查看次数: |
337 次 |
| 最近记录: |