Заполнение многомерного массива типа any в цикле for - PullRequest
0 голосов
/ 29 марта 2019

Я определил многомерный массив - Multi_arr=Array{Any, 2}(undef, length(n), 6).Намерение состоит в том, чтобы заполнить массив в цикле for.Когда я пытаюсь получить доступ к элементу из массива, например Multi_arr[1,1];возвращается следующая ошибка

UndefRefError: access to undefined reference

Stacktrace:
 [1] getindex(::Array{Any,2}, ::Int64, ::Int64) at ./array.jl:732
 [2] top-level scope at In[106]:1

Отличается ли доступ к элементу от обычных массивов в этом случае?

1 Ответ

1 голос
/ 29 марта 2019

Вы должны сначала присвоить значение элемента, прежде чем пытаться получить к нему доступ.Джулия сообщает о таких ситуациях, показывая #undef при отображении массива, например:

julia> Matrix{Any}(undef, 2, 3)
2×3 Array{Any,2}:
 #undef  #undef  #undef
 #undef  #undef  #undef

У этого свойства есть два преимущества:

  • быстро создать такой массив
  • вы можете поймать ошибку в своем коде (пытаясь получить доступ к неинициализированному местоположению)

(обратите внимание, что #undef является значением по умолчанию только для не битовых типов)

Вы можете проверить, является ли ячейка #undef в таком массиве, используя функцию isassigned.

Если вы хотите установить в массиве неинформативное значение по умолчанию, которое вы сможете прочитатьзатем передайте nothing или missing вместо undef, например:

julia> Matrix{Any}(nothing, 2, 3)
2×3 Array{Any,2}:
 nothing  nothing  nothing
 nothing  nothing  nothing

julia> Matrix{Any}(missing, 2, 3)
2×3 Array{Any,2}:
 missing  missing  missing
 missing  missing  missing

Теперь вы можете читать из такого массива перед назначением чего-либо (и, вероятно, тогда вам следует обработать nothing или missing как страж без назначения).

...