我在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来运行此程序