Мое (субъективное) мнение таково, что определение их как const
и последующее изменение содержимого само по себе не обязательно является плохой практикой. В Юлии ясно, что объявление const
относится к привязке значения переменной, а не к внутренним значениям.
Однако, если одна и та же переменная A используется для хранения разрозненных несвязанных значений (а не разных форм одной и той же матрицы, например, приведенных форм), это, безусловно, плохая практика. A[:] .= A .* 2
нормально, A[:] .= X
нет.
Кроме того, наличие нескольких глобальных переменных, которые мутируют в разных местах, обычно является запахом кода и часто приводит к неуловимым и не очень тонким ошибкам. Это также делает код сложным для рассуждения.
Как насчет инкапсуляции переменных в один тип struct
, например.
struct ArrayVars
A::Array{Complex{Float32}, dim}
B::Array{Float64, dim}
...
end
и создание экземпляра этого в функции стиля init
? (Надеюсь, вы можете придумать более подходящее имя для типа, чем ArrayVars
, принимая во внимание семантику задействованных массивов.) Затем вы можете передать эту единственную переменную этого типа в функции и манипулировать массивами внутри нее, вместо этого передачи много переменных для каждой функции.