DelimitedFiles.readdlm (source, ....) изменяет источник, действительно ли он предназначен и где в документации / определении это объясняется? - PullRequest
3 голосов
/ 06 июня 2019

удивился, обнаружив, что DelimitedFiles.readdlm(source, ...) изменяет входной параметр source. удивлен, потому что Ι не нашел никаких указаний в официальной документации https://docs.julialang.org/en/v1/stdlib/DelimitedFiles/index.html. это просто стандартное предположение об изменчивости в юлии? я думал, что somefunction, который может изменить входной параметр, будет указывать это с помощью somefunction! (добавление ! к имени функции)?

Ι использовал функцию следующим образом:

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

перед вызовом источник имеет тип Array{UInt8,1} и имеет несколько элементов. после вызова out имеет тип Tuple{Array{Any,2},Array{AbstractString,2}}, источник имеет тип Array{UInt8,1} (без изменений) и источник пуст (изменен).

1 Ответ

3 голосов
/ 06 июня 2019

Причина в том, что String(vec::Vector{UInt8}) не выполняет копирование, но становится владельцем vec (и изменяет его).

Пока вы должны написать:

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

Я задал вопрос здесь , чтобы уточнить, каково целевое поведение (копирование или не копирование).

...