在Julia中不同函数内添加函数方法的最佳/最高效方式

时间:2018-08-21 03:52:41

标签: performance methods julia method-dispatch

在我的问题中,我有一个函数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时要高效,因为它会被多次调用。

我可以看到两种方法,并且我想知道是否出于某种风格或性能方面的原因而选择一种方法,或者-更有可能-完全有一种更好的方法。

方法#1 嵌套函数:

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

在方法上是否有明显的优点/缺点,还是有更好的方法?

0 个答案:

没有答案