Являются ли массивы Julia однородными или нет? - PullRequest
4 голосов
/ 21 октября 2019

С одной стороны, если у меня есть x=[1,2,3], то я не могу добавить "foo" к x, но если я начну с x=[1,2,3,"foo"], тогда тип объединения будет Any, и я могу добавить все, что угодноЯ хочу, чтобы мой массив. Правильно ли говорить, что массивы Julia однородны? Потому что я могу просто создать массив Any.

1 Ответ

6 голосов
/ 22 октября 2019

Джулия по умолчанию ограничит данный массив максимально возможным типом элемента (eltype). Однако у julia есть специальный синтаксис для создания массива с любым типом, который вам нравится. Итак, чтобы создать массив с типом T, вы просто пишете T[x, y, z] вместо [x, y, z]. Для вашего примера это будет

julia> v = Any[1,2,3]
p3-element Array{Any,1}:
 1
 2
 3

julia> push!(v, "foo")
4-element Array{Any,1}:
 1
 2
 3
  "foo"

Причина такого поведения заключается в том, что если мы можем ограничить массив конкретным конкретным типом, то можно сделать несколько важных оптимизаций производительности. Если у вас есть массив с типом Any, то содержимое не может быть плотно упаковано в память.

...