最佳/最高效的方式在朱莉娅不同的功能中添加功能的方法(Best/most performant wa

2019-10-29 08:11发布

在我的问题,我有一个功能,说optim ,这需要作为它的一个参数另一个函数,说objfunc ,与其他一些参数一起:

optim(objfunc, args...)

我想调用该函数的另一个函数中,我们称之为run_expt ,并传递一个值objfunc ,我已经设置为某些其他功能的具体方法myfunc

那么具体的,说,如果myfunc了四个参数:

myfunc(a, b, c, d)

和我想的具体方法为它传递给optim ,其固定它的一些参数的值:

mymethod(a) = myfunc(a, [1, 2, 3], (12.0, 47), false)

而那些值的函数内确定run_expt在没有提前知道的一种方式。 什么是实现这一目标,特别是如果该方法的最佳方法mymethod是当被称为是高性能optim ,因为它是被称为多次。

我可以看到这样做的两种可能的方法,我想知道是否有一个是首选的一些风格和性能的原因,或者 - 更可能 - 有完全是一个更好的办法。

方法一嵌套函数:

function myfunc(a, b, c, d)
    ...
end

function run_expt(exptargs)
    ...
    mymethod(a) = myfunc(a, [1, 2, 3], (12.0, 47), false)
    ...
    optim(mymethod, args...)
    ---
end

方法2使用该方法返回另一个函数:

function myfunc(a, b, c, d)
    ...
end

function gen_method(methargs...)
    ...
    mymethod(a) = myfunc(a, [1, 2, 3], (12.0, 47), false)
    ...
    return mymethod
end

function run_expt(exptargs...)
    ...
    mymethod = gen_method(methargs...)
    ...
    optim(mymethod, args...)
    ---
end

是否有明显的优势/劣势,这两种方法还是有更好的办法?

文章来源: Best/most performant way to add function methods within a different function in Julia