我正在尝试创建一个更新Float64参数的函数。下面的例子应该能够澄清我想要实现的目标。
a=1.2
function fun!(a)
a=3.4;
end
不幸的是,a
仅在本地范围内更新。有办法吗?我认为传递指向函数的指针可能会有所帮助,但我不知道如何在Julia中执行此操作。
答案 0 :(得分:4)
你不能这样做。 Float64
不是可变值,因此您无法改变a
的值。您只能将a
替换为单独的Float64
。这就是不可变的价值。
更低的级别(通常是真的,虽然有例外):Float64
s由它们的实际字节表示,而mutable是指向实际字节的指针。 mutable的实际值是它的指针。变异意味着更改指针指向的内存位置的值,但对于不可变的内存不存在。
答案 1 :(得分:2)
要完成答案,如果您有C / C ++背景:
此外,AFAIK,!
的{{1}}只是一个引起注意的名称惯例,它与julia内部无关。您可以根据需要编写fun!
。
<强>示例:强>
fun
另见FAQ
参考{}示例:
Isaiah Norton发表评论
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)