Во-первых, вы хотите понять, что такое конструктор: для этого я предлагаю вам документ Джулии: Конструкторы в Юлии
Теперь, когда у вас есть теория, давайте разберем этовыражение:
a = Array{Int}(undef, (2, 2))
Что говорит это выражение: «Я хочу, чтобы a
было Array
измерения (2, 2)». Поэтому Юля попросит немного памяти. Когда я пишу это на Джулию, REPL:
julia> a = Array{Int}(undef, (2, 2))
2×2 Array{Int64,2}:
0 0
0 0
Теперь Array{T}(undef, dims)
является обобщением этого. «Построить массив определенного типа T
с определенным числом измерений dims
»
До сих пор я не объяснил, что такое undef
. undef
является ярлыком для UndefInitializer()
. В этом примере мы хотели получить неинициализированный массив. Что это значит? Для этого вы должны понимать, что переменные не создаются ex nihilo на вашем терминале. Они занимают определенное место в памяти вашего компьютера. И иногда, то же самое пространство памяти было занято другой переменной. Таким образом, пространство, которое может занять моя новая переменная, может быть не пустым:
julia> a = Array{Float64}(undef, (2, 2))
2×2 Array{Float64,2}:
6.94339e-310 6.94339e-310
6.94339e-310 0.0
Здесь я никогда не просил, чтобы эти значения были там. Я мог бы стереть его для работы с чистой переменной. Но это будет означать стирание значения для каждой ячейки, и для компьютера гораздо дороже заменить каждое значение, а не объявлять «вот новая переменная».
Таким образом, в основном undef
и неинициализированные массивы используются для повышения производительности. Если вы хотите, чтобы массив был хорошо инициализирован, вы можете использовать fill .