[英]Julia: Updating a Float64 within a function
我正在尝试创建一个函数来更新Float64参数。 下面的示例应该能够阐明我要实现的目标。
a=1.2
function fun!(a)
a=3.4;
end
不幸的是, a
仅在本地范围内更新。 有办法吗? 我认为传递指向该函数的指针可能会有所帮助,但是我不确定如何在Julia中执行此操作。
你做不到 一个Float64
不是可变值,所以你不能发生变异的价值a
。 您只能用单独的Float64
替换a
。 这就是一个不变的值。
更低的级别(尽管有例外,通常也是如此): Float64
由它们的实际字节表示,而可变变量是指向实际字节的指针。 可变变量的实际值是它的指针。 突变意味着更改指针所指向的内存位置处的值,但是对于不可变对象而言,这并不存在。
要完成答案,并且您具有C / C ++背景:
另外,AFAIK , !
fun!
只是一个引起人们注意的名称惯例,与julia内部无关。 您可以写fun
的东西。
例子:
v=ones(3); # [1 1 1]
isimmutable(v) # false -> v is passed by reference
foo(v::Array{Float64}) = v .*= 2; # hence v can be modified
foo(v);
v # [2 2 2]
v=Int(1) # 1
isimmutable(v) # true -> v is passed by copy
foo(v::Int) = v *= 2 # use a local copy of v
foo(v) # returns 2, but it is a local copy
v # 1 (unmodified because we worked with a copy)
另请参阅常见问题解答
Ref {}示例:
以赛亚·诺顿(Isaiah Norton)评论
foo(r::Ref{Int}) = r[] *= 2
r=Ref{Int}(1) # Base.RefValue{Int64}(1)
foo(r);
r # Base.RefValue{Int64}(2)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.