Юлия позволяет легко построение массивов, на слух синтаксис:Руководство умозаключения типа в Джулии
A = [ sqrt(i)^2+j for i in 0:10, j in 1:3 ]
Я полагаю, что для устойчивых выражений типа компилятор сначала определяет тип общего элемента, длина из итерации, а затем предварительно распределяет и инициализирует массив и его содержимое.
Иногда, однако, предпочтительнее вложенный цикл. Это может быть связано с тем, что массив имеет много измерений или потому, что длина второго итерабельного зависит от первого, или потому что выражение сложное и вычисление имеет побочные эффекты.
В этих случае приведенный выше код может быть расширен в
T = ???
A = Array{T}(11,3)
for i in 0:10
for j in 1:3
A[i,j] = sqrt(i)^2 + j
end
end
Как T
быть вычислены в простой, легко читаемой, легко обслуживаемой моде? Есть ли способ вручную вызвать механизм вывода типа, используемый под капотом списков? Решения я считаю неудовлетворительными являются:
T = Float64 # Not my job to do the compiler's work...
T = typeof(sqrt(0)^2+1) # Or is the argument of typeof not evaluated in this case?
Что-то вдоль линии C++ decltype
механизма возможно?
Если функции, которые вы используете, являются чистыми функциями, а компилятор знает, что они есть, то компилятор должен иметь возможность поднять вычисления во второй строке во время компиляции. –