Я думаю, что следующее делает то, что вы хотите.
using Base.Iterators
T(a,n) = product(repeated(a,n)...)
Это лучше во многих отношениях. Во-первых, он создает итератор, поэтому почти не использует памяти. Во-вторых, он является стабильным по типу, тогда как написанная вами версия создает массивы с eltype Any
, что делает код, который его использует, нестабильным.
Более того, это намного быстрее.
julia> @time S([1,2,3,4,5,6,7,8,9], 6);
1.767797 seconds (16.22 M allocations: 1.315 GiB, 20.28% gc time)
julia> @time T([1,2,3,4,5,6,7,8,9], 6);
0.000013 seconds (17 allocations: 576 bytes)
julia> @time collect(T([1,2,3,4,5,6,7,8,9], 6));
0.004837 seconds (20 allocations: 24.328 MiB)
Обратите внимание, что даже когда вы собираете результат, чтобы получить тот же ответ (массив), он все равно более чем в 400 раз быстрее и выделяет гораздо меньше памяти.