进行条件内部函数赋值

时间:2019-03-14 19:43:36

标签: julia

我想根据其参数在函数内部进行条件功能分配(通过调用函数bar1bar2)。问题是,必须将bar1bar2分配给一个参数函数。

这是我正在做的事的一个例子:

function foo(a, b=false)
    if b
        f(t) = t*a; #bar1(t,a)
    else
        f(t) = t/a; #bar2(t,a)
    end
    return f(2.0);
end

通话

foo(1.1, true)

输出

1.8181818181818181

通话

foo(1.1, false)

输出

ERROR: UndefVarError: f not defined
Stacktrace:
 [1] foo(::Float64, ::Bool) at C:\Users\pedro\Documents\codigos\Julia_HEM\compara_hem_neumann.jl:89
 [2] top-level scope at none:0

为什么在f时未定义b=false

编辑

一种解决方法是为每种条件定义不同的功能。例如

function foo(a, b=false)
    if b
        f(t) = t*a; #bar1(t,a)
        return f(2.0);
    else
        g(t) = t/a; #bar2(t,a)
        return g(2.0);
    end
end

问题仍然存在,

1 个答案:

答案 0 :(得分:0)

这是Julia语言的未解决问题(请参见https://github.com/JuliaLang/julia/issues/15602)。在这种情况下,建议使用匿名函数。

function foo(a, b=false)
    if b
        f = t -> t*a
    else
        f = t -> t/a
    end
    return f(2.0)
end

请注意,由于编译器无法推断foo的返回类型(因此,您可能必须添加函数返回类型的声明),这样做的效率不是很高。您在EDIT中的答案是类型稳定的。