Function 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

我正在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)
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),对吗?