DelimitedFiles.readdlm(source,....)修改了源代码,这真的是目的,并且在文档/定义中的何处进行了说明?

时间:2019-06-06 11:31:46

标签: julia

惊讶地发现DelimitedFiles.readdlm(source, ...)更改了source输入参数。感到惊讶,因为Ι在官方文档https://docs.julialang.org/en/v1/stdlib/DelimitedFiles/index.html中找不到任何指示。这只是关于茱莉亚变异性的标准假设吗?我以为可能会更改输入参数的somefunction会用somefunction!进行指示(将!添加到函数名)?

l使用了以下功能:

out = DelimitedFiles.readdlm(source,',',header=true)

在调用之前,源的类型为Array{UInt8,1},并且包含多个元素。通话后,out的类型为Tuple{Array{Any,2},Array{AbstractString,2}},source的类型为Array{UInt8,1}(未更改),source的状态为空(已更改)。

1 个答案:

答案 0 :(得分:3)

原因是String(vec::Vector{UInt8})不会执行复制,而是拥有vec的所有权(并对其进行突变)。

现在您应该写:

out = DelimitedFiles.readdlm(copy(source),',',header=true)

我问了一个问题here,以澄清预期的目标行为(复制或非复制)。