Константа box.NULL
Имеется целый ряд серьезных проблем при использовании значения nil из Lua в таблицах. Например: вы не можете корректно оценить длину таблицы, не являющейся последовательностью. (Узнайте больше о типах данных в Lua и LuaJIT.)
Пример:
tarantool> t = {0, nil, 1, 2, nil}---...tarantool> t---- - 0- null- 1- 2...tarantool> #t---- 4...
Вывод в консоль t обрабатывает значения nil в середине и в конце
таблицы по-разному. Это вызвано неопределённым поведением.
Для избежания этой проблемы используйте имеющуюся в Tarantool константу
box.NULL вместо значения nil. box.NULL является
местозаполнителем для значения nil в таблицах с целью сохранения
ключа без значения.
box.NULL является значением типа cdata, представляющим нулевой
указатель (NULL pointer). Оно подобно msgpack.NULL, json.NULL и
yaml.NULL. Таким образом, оно является некоторым не nil значением,
даже если является указателем на NULL.
Используйте box.NULL только с NULL, написанным заглавными буквами
(box.null является ошибкой).
Пример:
tarantool> t = {0, box.NULL, 1, 2, box.NULL}---...tarantool> t---- - 0- null # cdata- 1- 2- null # cdata...tarantool> #t---- 5...
Используйте выражение x == nil для проверки того, является ли x
nil или box.NULL.
Для выяснения того, является ли x в действительности nil, но не
box.NULL, используйте следующее условие:
type(x) == 'nil'
Если оно истинно (true), то x – это nil, но неbox.NULL.
Вы можете использовать следующее выражение для box.NULL:
x == nil and type(x) == 'cdata'
Если вышеуказанное выражение истинно (true), то x – это
box.NULL.