在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。您不能有条件地定义内部函数。有几种方法可以解决这个问题:

  1. 定义ff为匿名函数:
        if typp == "a"
          ff = u -> f(u,mu)
        elseif typp == "b"
          ff = u -> g(u,mu)
        end
        fu = ff(u)
    
  2. 定义ff一次,并在其中添加条件:
        function ff(u, typp)
          if typp == "a"
            f(u,mu)
          elseif typp == "b"
            g(u,mu)
          end
        end
        fu = ff(u, typp)
    
  3. 根本不要定义函数ff。您不需要,在您提供的示例中,只需fu有条件地
    分配

        if typp == "a"
          fu = f(u,mu)
        elseif typp == "b"
          fu = g(u,mu)
        end
    

以上是在Julia中的另一个函数中有条件地定义一个函数的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>