Array (массив) это универсальная структура данных, содержащая элементы типа T
. Обычно создается с помощью литералов массива:
[1, 2, 3] # Array(Int32)
[1, "hello", 'x'] # Array(Int32 | String | Char)
Массив может иметь смешанный тип, это значит, что T
будет являться объединением типов, и они будут вычисляться при создании массива: либо при явном определении T
, либо используя литерал массива. В последнем случае T будет определено с помощью дополнительного элемента литерала массива.
При создании пустого массива мы всегда должны определить T:
[] of Int32 # создастся как Array(Int32).new
[] # синтаксическая ошибка
Массивы строк могут быть созданы с помощью специального синтаксиса:
%w(one two three) # ["one", "two", "three"]
Массивы символов также могут быть созданы с помощью специального синтаксиса:
%i(one two three) # [:one, :two, :three]
Вы можете использовать синтаксис литералов массива вместе с другими типами, если у них определены методы new
(без аргументов) и <<
:
MyType{1, 2, 3}
Если MyType
не универсальный:
tmp = MyType.new
tmp << 1
tmp << 2
tmp << 3
tmp
Если MyType
универсальный:
tmp = MyType(typeof(1, 2, 3)).new
tmp << 1
tmp << 2
tmp << 3
tmp
В случае использования универсального типа тип аргументов также может быть определен:
MyType(Int32 | String) {1, 2, "foo"}