Julia中的动态函数名称定义..可能吗?

时间:2017-10-02 18:53:11

标签: dataframe julia metaprogramming

我有一个DataFrame结构为parName|region|year,访问函数为getData(parName,reg,year)(我使用访问函数,因为我实现了自己的查询逻辑)。

是否有可能基于unique(df[:parName])动态创建一组指向“par1(region,year)的{​​{1}}”函数?

如果是这样,使用哪种方法?

这与this问题有点相反..在那里我解释了如何动态调用函数,而如果可以动态声明/定义一个函数,我就会徘徊。

修改

我正在使用这种方法,以便在编写多维方程时获得最清晰,最紧凑的语法。 我设法(感谢@Liso答案)将其实现为:

getData("par1",region,year)

即,我使用for par in unique(dropna(df[:parName])) @eval ($(Symbol("$(par)_"))) = (r,d1,d2="",y=-1,op=sum) -> gd($par,r,d1,d2,y,op) @eval ($(Symbol("$(par)!"))) = (v,r,d1,d2="",y=-1) -> sd(v,$par,r,d1,d2,y) end 是setData类型的约定,而par!()是getData类型的等式。 When I'll be able to complete the macro that transforms f(dim1,dim2) = value into f(value,dim1,dim2)我将能够使用类似LaTeX(和类似AMPL)的语法编写我的模型,非常清楚:

par_()

1 个答案:

答案 0 :(得分:5)

我只是初学者试图了解朱莉娅,所以我不确定这是不是好主意!

https://docs.julialang.org/en/stable/manual/metaprogramming/#Code-Generation-1

我能够适应这个例子:

julia> for i in 4:6
    @eval ($(Symbol("func$i")))(a) = a^$i
end

julia> func4(2), func5(2), func6(2)
(16, 32, 64)

也许它可以帮助你玩和学习:)