Julia 中的动态函数名称定义.. 可能吗?
Dynamic function name definition in Julia.. possible?
我的 DataFrame 结构为 parName|region|year
,访问函数为 getData(parName,reg,year)
(我使用访问函数是因为我实现了自己的查询逻辑)。
是否可以基于unique(df[:parName])
动态创建一组函数,如par1(region,year)
"pointing to" getData("par1",region,year)
?
如果是,使用哪种方法?
这与 问题有点相反。那里解释了如何动态调用一个函数,而我徘徊是否可以动态地 declare/define 一个..
编辑:
我使用这种方法是为了在编写多维方程时获得最简洁、最紧凑的语法。
我设法(感谢@Liso 的回答)将其实现为:
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
即,我使用的约定是 par!()
是一个 setData 类型,par_()
是一个 getData 类型的方程。
我将能够使用非常清晰的类 LaTeX(和 AMPL)语法编写我的模型:
@meq price!(tp in secProducts, r in fr2) = sum(price_(r,pp,"",y2)*a_(r,pp,tp,y2) for pp in priProducts) + margin_(r,tp,"",y2)
我只是想了解 Julia 的初学者,所以我不确定这是否是个好主意!
参见 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)
也许它可以帮助您玩耍和学习 :)
我的 DataFrame 结构为 parName|region|year
,访问函数为 getData(parName,reg,year)
(我使用访问函数是因为我实现了自己的查询逻辑)。
是否可以基于unique(df[:parName])
动态创建一组函数,如par1(region,year)
"pointing to" getData("par1",region,year)
?
如果是,使用哪种方法?
这与
编辑:
我使用这种方法是为了在编写多维方程时获得最简洁、最紧凑的语法。 我设法(感谢@Liso 的回答)将其实现为:
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
即,我使用的约定是 par!()
是一个 setData 类型,par_()
是一个 getData 类型的方程。
@meq price!(tp in secProducts, r in fr2) = sum(price_(r,pp,"",y2)*a_(r,pp,tp,y2) for pp in priProducts) + margin_(r,tp,"",y2)
我只是想了解 Julia 的初学者,所以我不确定这是否是个好主意!
参见 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)
也许它可以帮助您玩耍和学习 :)