gpt4 book ai didi

julia - 如何根据变量值在函数内定义函数

转载 作者:行者123 更新时间:2023-12-04 18:29:29 25 4
gpt4 key购买 nike

我正在编写一个函数,如果它可以根据变量的输入或运行时值(然后使用该函数)以不同的方式定义另一个函数,我会发现它更易于编写和阅读。下面说明了这个想法(即使在这个简单的例子中在函数内定义一个函数没有任何好处):

julia> function f(option::Bool)
if option
g() = println("option true")
g()
else
g() = println("option false")
g()
end
end;
WARNING: Method definition g() in module Main at REPL[1]:3 overwritten at REPL[1]:6.

julia> f(true)
option false

julia> f(false)
ERROR: UndefVarError: g not defined
in f(::Bool) at .\REPL[1]:7

使用完整 function ... end g 的语法也没有帮助。

问题是:我是否做错了什么来获得警告和意外行为,还是 Julia 出于某种原因不允许这样做?如果可以做到,如何做到?

注意对于我目前的需要,我可以定义两个不同的函数,g1 和 g2,它似乎可以工作;但是如果 g的情况很多怎么办?仅针对一个任务概念?我认为作为一流对象的函数可以自由操作:分配给变量、根据条件以某种方式定义、覆盖等。

附言我知道我可以组合一个字符串然后解析它,但这是一个丑陋的解决方案。

最佳答案

您想使用匿名函数。 This is a known issue ( this other issue also shows your problem )。

function f(option::Bool)
if option
g = () -> println("option true")
else
g = () -> println("option false")
end
g
end

在 v0.5 中,匿名函数和泛型函数之间没有性能差异,因此没有理由不使用匿名函数。请注意,还有一个用于扩展匿名函数的语法:
f = function (x)
x
end

您可以通过调用重载添加调度:
(T::typeof(f))(x,y) = x+y

所以没有理由不在这里使用匿名函数。

关于julia - 如何根据变量值在函数内定义函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40982259/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com