Function 使用内部函数修改函数中的值!呼叫

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

假设我想写一个使所有布尔值都为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
    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