Best/most performant way to add function methods within a different function in Julia

拟墨画扇 提交于 2019-12-11 15:16:48

问题


In my problem, I have a function, say optim, that takes as one of its arguments another function, say objfunc, along with some other arguments:

optim(objfunc, args...)

I wish to call this function within another function, let's call it run_expt, and pass a value for objfunc that I have set to be a specific method of some other function myfunc.

So specifically, say if myfunc took four arguments:

myfunc(a, b, c, d)

and I wanted a specific method for it to pass to optim, which fixed the values of some of its arguments:

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

and those values were determined within the function run_expt in a way that was not known ahead of time. What is the best way to achieve this, particularly if the method mymethod is to be performant when called by optim as it is to be called many times.

I can see two possible ways of doing this, and I would like to know if there is one that is preferred for some stylistic or performance reason, or if - more likely - there is a better way entirely.

Approach #1 nested function:

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

Approach #2 using another function which returns methods:

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

Are there distinct advantages/disadvantages to either approach or is there a better way?

来源:https://stackoverflow.com/questions/51941318/best-most-performant-way-to-add-function-methods-within-a-different-function-in

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!