Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/google-sheets/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Julia 无返回中断函数_Julia - Fatal编程技术网

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
的匿名函数,请参阅。有时这很有用(例如,当您想稍后将一个完全不同的函数绑定到name
f
时,但这是一个罕见的用例)。通常,最好以标准方式定义函数。
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