Julia 无返回中断函数
我有一个函数Julia 无返回中断函数,julia,Julia,我有一个函数 function foo(a) if a > 5 a = 5 end some_more_code end 如果If-语句为true,我想结束函数,但不想返回任何内容-我只需要更改a的值 如何做到这一点?您可以编写(注意,我还更改了函数定义的语法,使其更符合Julia样式的标准): 只需使用return关键字,后面不带任何表达式。准确地说,在这种情况下,Julia从函数返回类型为nothing的value(该值未打印在REPL中,用
function foo(a)
if a > 5
a = 5
end
some_more_code
end
如果If
-语句为true
,我想结束函数,但不想返回任何内容-我只需要更改a
的值
如何做到这一点?您可以编写(注意,我还更改了函数定义的语法,使其更符合Julia样式的标准):
只需使用return
关键字,后面不带任何表达式。准确地说,在这种情况下,Julia从函数返回类型为nothing
的value(该值未打印在REPL中,用于表示您不想从函数返回任何内容)
请注意,a
的值只会在本地(在函数范围内)更改,因此在函数之外它将保持不变:
julia> function foo(a)
if a > 5
a = 5
return
end
# some_more_code
end
foo (generic function with 1 method)
julia> x = 10
julia> foo(x)
julia> x
10
为了使更改在函数外部可见,您必须将a
设置为某种容器。这种情况下的典型容器是Ref
:
julia> function foo2(a)
if a[] > 5
a[] = 5
return
end
# some_more_code
end
foo2 (generic function with 1 method)
julia> x = Ref(10)
Base.RefValue{Int64}(10)
julia> foo2(x)
julia> x[]
5
我不清楚你想要实现什么。是否要就地修改a
?是的,我确实要就地修改a
。这可能不可能:只能就地修改可变数据结构。在您的示例中,a
是一个不可变的Int
,因此不能以任何方式进行修改。您可以做的是将变量包装在可变容器中,如数组或Ref
,但这会增加更多的复杂性。好好想想你想做什么你是对的。在我的实际代码中,a是一个可变结构。想这样做,让它成为一个最小的例子。不管怎样,这个讨论与实际问题完全无关。谢谢。这就是答案。谢谢你修改了语法。我的版本来自R
。我也将在问题中更改它。语法f=function…
有效,但它创建了一个绑定到变量f
的匿名函数,请参阅。有时这很有用(例如,当您想稍后将一个完全不同的函数绑定到namef
时,但这是一个罕见的用例)。通常,最好以标准方式定义函数。
julia> function foo2(a)
if a[] > 5
a[] = 5
return
end
# some_more_code
end
foo2 (generic function with 1 method)
julia> x = Ref(10)
Base.RefValue{Int64}(10)
julia> foo2(x)
julia> x[]
5