Присваивание

Выражение присваивания присваивает результат выражения справа от знака равенства цели слева. Целью может быть путь, индекс массива или переменная.

Синтаксис

Список принятых обозначений

В данном разделе при описании выражений приняты следующие обозначения:

  • Элементы выражений разделены тильдой.

  • Круглые скобки служат для группировки элементов выражения.

  • Если в выражении используется литерал скобок или других символов, они заключаются в кавычки: "(". "NEWLINE" обозначает перевод строки.

  • Квантификаторы после элементов и групп обозначают количество повторений:

    • ? — элемент необязателен, может отсутствовать в выражении;

    • + — элемент обязателен и может повторяться в выражении несколько раз;

    • * — элемент может отсутствовать или повторяться несколько раз.

target ~ ("," ~ error)? ~ operator ~ expression
Элемент Описание

target

Цель. Должна быть переменной, индексом или путем. Возможно присваивание сразу нескольким целям, разделенным оператором =.

error

Ошибка. Позволяет необязательное присваивание, когда выражение справа может возвращать ошибки. Обычно используется при вызове функций, которые могут возвращать ошибки.

operator

Оператор. Разделяет target и expression и определяет условия присваивания:

  • = — обычное присваивание;

  • |= — присваивание со слиянием объектов.

expression

Выражение, зависящее от типа цели target:

  • Если target — это переменная, expression может быть любым выражением.

  • Если target — это путь, expression может быть любым выражением, которое возвращает поддерживаемый тип значения объекта, то есть любым выражением, кроме регулярного.

Используйте VRL-песочницу, чтобы проверить работу программы.

Примеры присваивания

Пример присваивания пути

Исходный код
.message = "Hello, World!"
Результат
{
  "message": "Hello, World!",
}

Пример присваивания по вложенному пути

Исходный код
.parent.child = "Hello, World!"
Результат
{
  "parent": {
    "child": "Hello, World!"
  }
}

Пример присваивания элементу массива

Исходный код
.array[1] = "Hello, World!"
Результат
{
  "array": [
    null,
    "Hello, World!"
  ]
}

Пример присваивания переменной

Исходный код
my_variable = "Hello, World!"
Результат
"Hello, World!"

Пример присваивания с возможностью ошибки (успех)

Исходный код
.parsed, .err = parse_json("{\"Hello\": \"World!\"}")
Результат
{
  "parsed": {
    "Hello": "World!"
  }
}

Пример присваивания с возможностью ошибки (ошибка)

Исходный код
.parsed, .err = parse_json("malformed")
Результат
{
  "err": "malformed"
}

Множественное присваивание

Оператор = может использоваться для присваивания нескольким целям сразу. Множественное присваивание неприменимо, если используется присваивание ошибок.

Пример множественного присваивания

Программа VRL
.first = .second = "Hello, World!"
Результат
{
  "first": "Hello, World!",
  "second": "Hello, World!"
}

Присваивание со слиянием

Оператор |= обновляет поля в целевом объекте на основе содержимого исходного объекта. Здесь целевой объект — это объект в левой части выражения, а исходный — объект в правой части. При этом:

  • Поля, которые есть только в целевом объекте, остаются неизменными.

  • Поля, которые есть только в исходном объекте, добавляются в целевой.

  • Если поле существует в обоих объектах, значение поля из исходного объекта заменяет значение из целевого объекта. Вложенные структуры в таком случае не учитываются.

    Чтобы при слиянии объединить вложенные поля, используйте функцию merge с параметром deep=true.

Пример присваивания со слиянием

Исходный код
my_variable = {
  "parent1": {
    "child1": 1,
    "child2": 2
  },
  "parent2": {
    "child3": 3
  }
}
my_variable |= {
  "parent1": {
    "child2": 4,
    "child5": 5
  }
}
Результат
{
  "parent1": {
    "child2": 4,
    "child5": 5
  },
  "parent2": {
    "child3": 3
  }
}

Была ли полезна эта страница?

Обратная связь