Функции отладки

В данной статье при описании функций приняты следующие обозначения:

  • Типы значений, которые принимает аргумент, указаны в угловых скобках.

  • Перечень необязательных аргументов заключается в квадратные скобки. При вызове функции квадратные скобки вводить не нужно.

  • После :: в угловых скобках указаны типы значений, которые возвращает функция.

assert

Проверяет условие condition, которое должно возвращать логическое значение. Если условие оценивается как false, программа завершается с сообщением message.

Спецификация функции

assert(condition: <логическое значение | сравнение | логическое выражение>, [message: <строка>])
:: <пустое значение> , <ошибка>
Аргумент Тип Описание По умолчанию Обязателен

condition

логическое значение сравнение логическое выражение

Условие для проверки, должно возвращать логическое значение.

да

message

строка

Необязательное пользовательское сообщение об ошибке.

Если утверждение условия не выполняется, к пользовательскому сообщению автоматически добавляется префикс сообщения по умолчанию. См. примеры ниже для примера полностью сформированного сообщения в журнале.

нет

Примечания

Эта функция имеет специальное поведение, о котором следует знать.

  • Функцию assert следует использовать автономно и только тогда, когда вы хотите прервать программу. Избегайте ее использования в логических выражениях и других ситуациях, в которых вы хотите, чтобы программа продолжала работу, даже если условие оценивается как false.

Ошибки

Функция assert может возвращать ошибки, для которых требуется обработка:

  • условие оценивается как false

Примеры

Утверждение (true)

Пример 1. Исходный код
ok, err = assert("foo" == "foo", message: "\"foo\" must be \"foo\"!")
Пример 2. Результат
true

Утверждение (false)

Пример 3. Исходный код
assert!("foo" == "bar", message: "\"foo\" must be \"foo\"!")

assert_eq

Проверяет, что два выражения, left и right, имеют одинаковое значение. Если они не равны, программа прерывается с сообщением message.

Спецификация функции

assert_eq(left: <любой тип>, right: <любой тип>, [message: <строка>])
:: <логическое значение>
Аргумент Тип Описание По умолчанию Обязателен

left

любое

Значение для проверки на равенство с right.

да

right

любое

Значение для проверки на равенство с left.

да

message

строка

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

нет

Примечания

Эта функция имеет специальное поведение, о котором следует знать.

  • Функцию assert_eq следует использовать автономно и только тогда, когда вы хотите прервать программу. Избегайте ее использования в логических выражениях и других ситуациях, в которых вы хотите, чтобы программа продолжала работу, даже если условие оценивается как false.

Примеры

Успешное утверждение

Пример 4. Исходный код
assert_eq!(1, 1)
Пример 5. Результат
true

Неудачное утверждение

Пример 6. Исходный код
assert_eq!(127, [1, 2, 3])

Неудачное утверждение с пользовательским сообщением в журнале

Пример 7. Исходный код
assert_eq!(1, 0, message: "Unequal integers")

log

Выводит value в стандартный вывод Vector с указанным level.

Спецификация функции

log(value: <любой тип>, [level: <строка>, rate_limit_secs: <целое число>])
:: <пустое значение>
Аргумент Тип Описание По умолчанию Обязателен

value

любое

Значение для вывода в лог.

да

level

строка

Уровень логирования.

info

нет

rate_limit_secs

целое число

Определяет, что сообщение будет выводиться не чаще указанного количества секунд. Используйте значение 0, чтобы отключить ограничение частоты.

1

нет

Примеры

Вывод сообщения в лог

Пример 8. Исходный код
log("Hello, World!", level: "info", rate_limit_secs: 60)
Пример 9. Результат
null

Вывод ошибки в лог

Пример 10. Исходный код
ts, err = to_int(.field)
if err != null {
  log(err, level: "error")
}
Пример 11. Результат
null