Function Julia-使用元编程定义多个函数
我正在Julia中开发一个软件包,在我的软件包中,有几个函数具有相同的布局,但它们使用的参数有一些小的变化。例如:Function Julia-使用元编程定义多个函数,function,package,julia,metaprogramming,Function,Package,Julia,Metaprogramming,我正在Julia中开发一个软件包,在我的软件包中,有几个函数具有相同的布局,但它们使用的参数有一些小的变化。例如: function MyFunction1(arg1, arg2) do(arg1,arg2,parameter1) end function MyFunction2(arg1, arg2) do(arg1,arg2,parameter2) end function MyFunction3(arg1, arg2) do(arg1,arg2,parameter3) en
function MyFunction1(arg1, arg2)
do(arg1,arg2,parameter1)
end
function MyFunction2(arg1, arg2)
do(arg1,arg2,parameter2)
end
function MyFunction3(arg1, arg2)
do(arg1,arg2,parameter3)
end
spec = [["MyFunction1","parameter1"],["MyFunction2","parameter2"],["MyFunction3","parameter3"]]
现在,我想做的是创建一个规范数组,在其中传递函数名和参数,并使用元编程来定义这些函数,例如:
function MyFunction1(arg1, arg2)
do(arg1,arg2,parameter1)
end
function MyFunction2(arg1, arg2)
do(arg1,arg2,parameter2)
end
function MyFunction3(arg1, arg2)
do(arg1,arg2,parameter3)
end
spec = [["MyFunction1","parameter1"],["MyFunction2","parameter2"],["MyFunction3","parameter3"]]
朱莉娅怎么能做到这一点?请注意,这是一个简化的例子,我实际上希望允许更复杂的变化,否则只需用附加参数创建一个函数而不是创建几个函数就更聪明了。 < P>您应该考虑在这里不使用元编程,而是定义一个这样的一般函数:
function my_general_function(arg1, arg2, parameters)
do(arg1, arg2, parameters)
end
function my_function_generator(parameters)
(arg1, arg2) -> do(arg1, arg2, parameters)
end
const my_function_1 = my_function_generator(parameters1)
const my_function_2 = my_function_generator(parameters2)
const my_function_3 = my_function_generator(parameters3)
然后,您可以在一行中定义每个变量:
my_function_1(arg1, arg2) = my_general_function(arg1, arg2, parameters1)
my_function_2(arg1, arg2) = my_general_function(arg1, arg2, parameters2)
my_function_3(arg1, arg2) = my_general_function(arg1, arg2, parameters3)
如果arg1
,arg2
部分非常烦人,无法写出,则可以编写如下函数生成器:
function my_general_function(arg1, arg2, parameters)
do(arg1, arg2, parameters)
end
function my_function_generator(parameters)
(arg1, arg2) -> do(arg1, arg2, parameters)
end
const my_function_1 = my_function_generator(parameters1)
const my_function_2 = my_function_generator(parameters2)
const my_function_3 = my_function_generator(parameters3)
然后定义每个专用版本,如下所示:
function my_general_function(arg1, arg2, parameters)
do(arg1, arg2, parameters)
end
function my_function_generator(parameters)
(arg1, arg2) -> do(arg1, arg2, parameters)
end
const my_function_1 = my_function_generator(parameters1)
const my_function_2 = my_function_generator(parameters2)
const my_function_3 = my_function_generator(parameters3)
这可以通过宏来实现,但这里不需要宏,如果您尽可能坚持使用高阶函数(将函数作为参数或返回函数的函数)而不是宏,事情通常会更简单、更清晰。OP希望在数组中使用参数,但这个答案可以做到这一点,只需制作最后一个代码框映射(my_function_generator,paramlist),对吗?