Джулии не хватает конструкторов массивов?

Я только что установил julia, посмотрев на нее некоторое время. Интерпретатор и базовая программа hello world работают, но ... что-то не так, если конструктор массива.

Я пытаюсь запустить базовый пример из документации A = Array{Float64, 2}(2, 2); и получаю следующее:

julia> A = Array{Float64, 2}(2, 2);
ERROR: MethodError: no method matching Array{Float64,2}(::Int64, ::Int64)
Closest candidates are:
  Array{Float64,2}(::UndefInitializer, ::Int64, ::Int64) where T at boot.jl:396
  Array{Float64,2}(::UndefInitializer, ::Int64...) where {T, N} at boot.jl:400
  Array{Float64,2}(::UndefInitializer, ::Integer, ::Integer) where T at sysimg.jl:143
  ...
Stacktrace:
 [1] top-level scope at none:0

Я понимаю, что это глупый вопрос, и он вполне может противоречить духу SO, но Google не дал никаких результатов, и это пример копии, вставленной в конце концов из документации.

Нижний вопрос: мне нужен простой старый 2d-массив, что идет не так и как исправить?

3
0
316
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Из Julia v0.7 на пути к получению неинициализированного массива стоит Array{Float64, 2}(undef, 2, 2) (обратите внимание на undef).

Чтобы получить предварительно инициализированный массив, вы можете, например, использовать fill(0., 2, 2).

(Думаю, ваша проблема возникла из-за чтения старой версии документации.)

Спасибо! Теперь это работает! Я читал документацию о undef. Однако это поднимает вопрос о Почему, это было введено. Я имею в виду, что первый аргумент - это UndefInitializer, который является одноэлементной константой. Поправьте меня, если я ошибаюсь, но у нас есть функция, принимающая параметр, и этому параметру может быть дано только одно конкретное значение, undef. Какой цели это служит?

Rares Dima 13.09.2018 20:58

Помимо undef, этот аргумент также может быть missing или nothing, если тип может содержать такие значения.

hckr 13.09.2018 21:08

Идея состоит в том, что в будущем мы будем реализовывать больше конструкторов массивов, подобных этим, где первые аргументы всегда определяют содержимое.

fredrikekre 14.09.2018 00:25

Это также явно указывает на то, что массив не инициализирован: ранее были случаи, когда люди получали ошибки или неожиданные результаты, потому что они ожидали, что массив будет заполнен нулями.

Simon Byrne 14.09.2018 01:32

Другие вопросы по теме