Перейти к содержимому
Последнее обновление

Приведение к типам ARRAY

Тип ARRAY используется для хранения и обработки массивов данных, которые могут содержать элементы различных базовых типов, например целые числа, строки и т. д., а также вложенные сложные типы.

Приведение к ARRAY​

Из String​

Изменение поведения

До версии 4.0 разбор завершался ошибкой при наличии пустых строк между разделителями, например для "[,,]" возвращалось NULL. Начиная с версии 4.0, для "[,,]" в нестрогом режиме возвращается [null, null, null], а в строгом режиме возникает ошибка.

Строгий режим​

Определение BNF​
<array>          ::= "[" <array-content>? "]" | <empty-array> 

<empty-array> ::= "[]"

<array-content> ::= <data-token>(<collection-delim> <data-token>)*

<data-token> ::= <whitespace>* "\"" <inner-sequence> "\"" <whitespace>*
| <whitespace>* "'" <inner-sequence> "'" <whitespace>*
| <whitespace>* <inner-sequence> <whitespace>*

<inner-sequence> ::= .*

<collection-delim> ::= ","
Описание правил​
  1. Текстовое представление массива должно начинаться с открывающей квадратной скобки [ и заканчиваться закрывающей квадратной скобкой ].
  2. Пустые массивы представляются непосредственно как [].
  3. Элементы массива разделяются запятыми.
  4. Перед элементами массива и после них допускаются пробельные символы.
  5. Элементы массива можно заключать в парные одинарные (') или двойные (") кавычки.
  6. Для обозначения значения null можно использовать "null".
  7. При разборе к частям, соответствующим <data-token>, далее применяются правила разбора целевого типа T.

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

Примеры​
Входная строкаРезультат преобразованияКомментарий
'[]'[]Корректный пустой массив
' []'ОшибкаМассив не начинается со скобки, разбор завершается ошибкой
'[ ]'ОшибкаМассив содержит один элемент, строку из пробелов; такую строку невозможно разобрать как int
"[ 123, 123]"Приведение к Array<int>: [123, 123]Корректный массив
'[ " 123 " , "456 "]'Приведение к Array<int>: [123, 456]Корректный массив
'[ 123 , "456" ]'Приведение к Array<int>: [123, 456]Корректный массив
'[ [] ]'Приведение к Array<Array<int>>: [[]]Внешний массив содержит элемент ' [] ', который после удаления пробелов по краям становится корректным массивом
'[ null ,123]'Приведение к Array<int>: [null, 123]Корректный массив, содержащий null
'[ "null" ,123]'ОшибкаСтроку "null" невозможно преобразовать в тип int

Примечание: убедитесь, что элементы между запятыми содержат допустимые значения, иначе разбор завершится ошибкой.

Нестрогий режим​

Определение BNF​
<array>          ::= "[" <array-content>? "]" | <empty-array> 

<empty-array> ::= "[]"

<array-content> ::= <data-token>(<collection-delim> <data-token>)*

<data-token> ::= <whitespace>* "\"" <inner-sequence> "\"" <whitespace>*
| <whitespace>* "'" <inner-sequence> "'" <whitespace>*
| <whitespace>* <inner-sequence> <whitespace>*

<inner-sequence> ::= .*

<collection-delim> ::= ","
Описание правил​
  1. Текстовое представление массива должно начинаться с открывающей квадратной скобки [ и заканчиваться закрывающей квадратной скобкой ].
  2. Пустые массивы представляются непосредственно как [].
  3. Элементы массива разделяются запятыми.
  4. Перед элементами массива и после них допускаются пробельные символы.
  5. Элементы массива можно заключать в парные одинарные (') или двойные (") кавычки.
  6. Для обозначения значения null можно использовать "null".
  7. При разборе к частям, соответствующим <data-token>, далее применяются правила разбора целевого типа T.

Если формат массива не соответствует приведённому выше определению BNF, возвращается NULL. Если элементы не соответствуют требованиям соответствующего типа, на их позициях устанавливается null.

Примеры​
Входная строкаРезультат преобразованияКомментарий
'[]'[]Корректный пустой массив
' []'NULLМассив не начинается со скобки, разбор завершается ошибкой
'[ ]'[null]Массив содержит один элемент, строку из пробелов; такую строку невозможно разобрать как int
"[ 123, 123]"Приведение к Array<int>: [123, 123]Корректный массив
'[ " 123 " , "456 "]'Приведение к Array<int>: [123, 456]Корректный массив
'[ 123 , "456" ]'Приведение к Array<int>: [123, 456]Корректный массив
'[ [] ]'Приведение к Array<Array<int>>: [[]]Внешний массив содержит элемент ' [] ', который после удаления пробелов по краям становится корректным массивом
'[ null ,123]'Приведение к Array<int>: [null, 123]Корректный массив, содержащий null
'[ "null" ,123]'Приведение к Array<int>: [null, 123]Строку "null" невозможно преобразовать в тип int, поэтому она преобразуется в null

Из Array<Other Type>​

Строгий режим​

Описание правил​

Для каждого элемента Array выполняется приведение из типа Other Type к типу Type. Это приведение также выполняется в строгом режиме.

Примеры​
Входной массивРезультат преобразованияКомментарий
["123", "456"]Приведение к Array<int>: [123, 456]"123" и "456" можно преобразовать в Int
["abc", "123"]Ошибка"abc" невозможно преобразовать в Int
[null, "123"]Приведение к Array<int>: [null, 123]Результат приведения null по-прежнему равен null

Нестрогий режим​

Описание правил​

Для каждого элемента Array выполняется приведение из типа Other Type к типу Type. Это приведение также выполняется в нестрогом режиме.

Примеры​
Входной массивРезультат преобразованияКомментарий
["123", "456"]Приведение к Array<int>: [123, 456]"123" и "456" можно преобразовать в Int
["abc", "123"]Приведение к Array<int>: [null, 123]"abc" невозможно преобразовать в Int, поэтому это значение преобразуется в null
[null, "123"]Приведение к Array<int>: [null, 123]Результат приведения null по-прежнему равен null