在函数内部,如何基于原始函数参数构造新函数,以便将其作为参数传递给另一个函数

时间:2018-12-04 16:34:57

标签: performance scope functional-programming julia

我在julia中遇到函数声明和范围问题。我有一个主要函数,我们称它为mainfunc,它接受​​一些参数。在此函数中,我最终希望调用另一个函数,例如callfunc,该函数将一个函数作为参数。我将调用此功能passfunc

我还有一个复杂的问题,就是我在逻辑之外定义了最终函数,该函数取决于参数,但仍然以不同的方式取决于参数。我可以称之为initfunc。必须根据参数将其与其他函数组合在一起,以创建passfunc

基于mainfunc的参数,我将有passfunc的不同定义。给定我对一个相关问题here的回答,我最初尝试使用匿名函数以下列方式定义函数逻辑,这些函数显然更有效:

function mainfunc(args)

    init_func = x -> funcA(x, args)

    if args[1] == "foo"
        anon_func = x -> func1(x, args)
    elseif args[1] == "bar"
        anon_func = x -> func2(x, args)
    end

    function passfunc(x)
        return init_func(x) + anon_func(x)
    end

    # ... define other args...

    callfunc(passfunc, other_args)
end

以这种方式定义函数会导致julia错误-当我运行此代码时,显然passfunc是未定义的变量。范围是否不允许在if语句中定义匿名函数?我还能怎么写实现这一目标的代码?

我觉得更好地理解函数式编程原理会使这里的解决方案显而易见。预先感谢您提供任何改进技巧。

此外,我正在使用julia v0.7来运行此程序

0 个答案:

没有答案