数组的部分被传递给子函数时,如何在子函数内修改被传递的数组的值?
如果我们构建一个数组,将其传递给子函数,在子函数内修改该数组
function fun1(array)
array = ones(3, 3)
end
function fun2(array)
for i in 1:3
for j in 1:3
array[i, j] = 1.0
end
end
end
function fun3(array)
copyto!(array, ones(3, 3))
end
myArray1 = zeros(3, 3)
myArray2 = zeros(3, 3, 3)
用fun1
、fun2
、fun3
分别作用与myArray1
、myArray2[1, :, :]
,其中fun2
、fun3
成功修改了myArray1
的值,但没有函数能在传入myArray2[1, :, :]
时修改myArray2[1, :, :]
的值
所以数组的部分被传递给子函数时,如何在子函数内修改被传递的数组的值?还是只能另辟蹊径?
!好,fun4
都可以修改了,我会用.+
不会用.=
function fun4(array)
array .= ones(3, 3)
end
今天跑程序出现奇怪的bug,试了一下,又不能修改了吗?
julia> versioninfo()
Julia Version 1.5.3
Commit 788b2c77c1 (2020-11-09 13:37 UTC)
Platform Info:
OS: Windows (x86_64-w64-mingw32)
CPU: Genuine Intel(R) CPU 0000 @ 2.90GHz
WORD_SIZE: 64
LIBM: libopenlibm
LLVM: libLLVM-9.0.1 (ORCJIT, skylake)
julia> myArray2 = zeros(3, 3, 3)
3×3×3 Array{Float64,3}:
[:, :, 1] =
0.0 0.0 0.0
0.0 0.0 0.0
0.0 0.0 0.0
[:, :, 2] =
0.0 0.0 0.0
0.0 0.0 0.0
0.0 0.0 0.0
[:, :, 3] =
0.0 0.0 0.0
0.0 0.0 0.0
0.0 0.0 0.0
julia> function fun4(array)
array .= ones(3, 3)
end
fun4 (generic function with 1 method)
julia> fun4(myArray2[1, :, :])
3×3 Array{Float64,2}:
1.0 1.0 1.0
1.0 1.0 1.0
1.0 1.0 1.0
julia> myArray2
3×3×3 Array{Float64,3}:
[:, :, 1] =
0.0 0.0 0.0
0.0 0.0 0.0
0.0 0.0 0.0
[:, :, 2] =
0.0 0.0 0.0
0.0 0.0 0.0
0.0 0.0 0.0
[:, :, 3] =
0.0 0.0 0.0
0.0 0.0 0.0
0.0 0.0 0.0
数组slice不发生copy是个没法依赖的实现细节。用@view报一下。