Function 使用内部函数修改函数中的值!呼叫
假设我想写一个使所有布尔值都为false的函数:Function 使用内部函数修改函数中的值!呼叫,function,julia,Function,Julia,假设我想写一个使所有布尔值都为false的函数: function true_to_false!(boolean::Bool) boolean = false end 为什么我不能用它来改变另一个函数的值?e、 g: function make_x_false() x = true true_to_false!(x) return x end 返回true 当然也有一些变通办法,比如 function make_x_false() x = true
function true_to_false!(boolean::Bool)
boolean = false
end
为什么我不能用它来改变另一个函数的值?e、 g:
function make_x_false()
x = true
true_to_false!(x)
return x
end
返回true
当然也有一些变通办法,比如
function make_x_false()
x = true
x = true_to_false!(x)
end
及
但我有一个例子,这些将导致一些非常混乱的代码
谢谢,Julia正在使用传递共享机制请参见 在实践中,这意味着当函数是可变结构、Dict或数组时,可以改变其参数,但不能改变基元类型-它们只是在函数内部重新创建 因此,您可以使用示例Ref来实现所需的效果:
julia> function make_x_false!(x::Ref{Bool})
x[] = false
end;
julia> u = Ref{Bool}(true)
Base.RefValue{Bool}(true)
julia> u[]
true
julia> make_x_false!(u);
julia> u[]
false
Julia正在使用传递共享机制请参见 在实践中,这意味着当函数是可变结构、Dict或数组时,可以改变其参数,但不能改变基元类型-它们只是在函数内部重新创建 因此,您可以使用示例Ref来实现所需的效果:
julia> function make_x_false!(x::Ref{Bool})
x[] = false
end;
julia> u = Ref{Bool}(true)
Base.RefValue{Bool}(true)
julia> u[]
true
julia> make_x_false!(u);
julia> u[]
false
美丽的谢谢@przemyslaw szufealtiful!谢谢@przemyslaw szufel