Julia 进行条件内部函数赋值

Julia 进行条件内部函数赋值,julia,Julia,我想根据函数的参数在函数内部进行条件函数赋值(通过调用函数bar1或bar2)。问题是,它必须将bar1或bar2分配给一个单参数函数 这是我正在做的一个例子: 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) foo(1.1, fals

我想根据函数的参数在函数内部进行条件函数赋值(通过调用函数
bar1
bar2
)。问题是,它必须将
bar1
bar2
分配给一个单参数函数

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

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)
foo(1.1, false)
输出

1.8181818181818181
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
召唤

foo(1.1, true)
foo(1.1, false)
输出

1.8181818181818181
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
b=false
时,为什么没有定义
f

编辑 解决方法是为每个条件定义不同的函数。比如说

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

问题仍然存在,尽管…

这在朱莉娅语言中是一个悬而未决的问题(请参阅)。在这种情况下,建议使用匿名函数

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

请注意,这将不是非常有效,因为编译器无法推断
foo
的返回类型(因此可能需要添加函数返回类型的声明)。您在编辑中的答案是类型稳定的。

这在Julia语言中是一个悬而未决的问题(请参阅)。在这种情况下,建议使用匿名函数

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

请注意,这将不是非常有效,因为编译器无法推断
foo
的返回类型(因此可能需要添加函数返回类型的声明)。您在编辑中的答案是类型稳定的。

您的函数代码经常依赖于这样的真/假语句,这是一个需要考虑使用参数类型的<代码> @生成/<代码>函数的情况。通常您的函数代码依赖于这样的真/假语句,则需要考虑使用<代码> @生成的< /代码>。函数以参数类型为条件。