在Julia中的另一个函数中有条件地定义一个函数
学习较新的 julia 语法和范围的速度很慢。
在 Julia v1.1.1 中
为什么下面的 MWE 会抛出错误“ff not defined”的解释是什么?
N = 5;
typp = "b";
mu = 2;
function bigfun()
function f(u,mu)
ee = mu*u;
return ee
end
function g(uv,mu)
ee = (mu^2)*uv
return ee;
end
while 1 == 1
u = ones(N);
if typp == "a"
ff(u) = f(u,mu);
elseif typp == "b"
ff(u) = g(u,mu);
end
fu = ff(u);
break;
end
end
bigfun();
回答
这是 Julia 中的一个已知错误:https : //github.com/JuliaLang/julia/issues/15602。您不能有条件地定义内部函数。有几种方法可以解决这个问题:
- 定义
ff为匿名函数:if typp == "a" ff = u -> f(u,mu) elseif typp == "b" ff = u -> g(u,mu) end fu = ff(u) - 定义
ff一次,并在其中添加条件:function ff(u, typp) if typp == "a" f(u,mu) elseif typp == "b" g(u,mu) end end fu = ff(u, typp) - 根本不要定义函数
ff。您不需要,在您提供的示例中,只需fu有条件地
分配if typp == "a" fu = f(u,mu) elseif typp == "b" fu = g(u,mu) end