Tarantool CE/EE Documentation portal logo
Помощь
Обновлена 15 сентября 2026 г. в 08:55

Модуль varbinary

Начиная с: 3.0.0

Обзор

Модуль varbinary предоставляет функции для работы с бинарными объектами переменной длины в Lua. Он содержит функции для создания объектов varbinary, проверки их типа, а также определяет базовые операторы для таких объектов.

Например:

local varbinary = require('varbinary')-- Create a varbinary objectlocal bin = varbinary.new('data')local bin_hex = varbinary.new('\xFF\xFE')-- Check whether a value is a varbinary objectvarbinary.is(bin) -- truevarbinary.is(bin_hex) -- truevarbinary.is(100) -- falsevarbinary.is('data') -- false-- Check varbinary objects equalityprint(bin == varbinary.new('data')) -- trueprint(bin == 'data') -- trueprint(bin ~= 'data1') -- trueprint(bin_hex ~= '\xFF\xFE') -- false-- Check varbinary objects lengthprint(#bin) -- 4print(#bin_hex) -- 2-- Print string representationprint(tostring(bin)) -- datalocal bin2 = varbinary.new(ffi.cast('const char *', 'data'), 4)varbinary.is(bin2) -- trueprint(bin2) -- datalocal luatest = require('luatest')local test_group = luatest.group()test_group.test_varbinary = function()    luatest.assert_equals(varbinary.is(bin), true)    luatest.assert_equals(bin, 'data')    luatest.assert_equals(#bin, 4)    luatest.assert_equals(#varbinary.new('\xFF\xFE'), 2)end

Кодирование объектов varbinary

Объекты varbinary сохраняют свой бинарный тип при кодировании встроенными кодировщиками MsgPack и YAML. Сравните со строками:

  • Строка в MsgPack:

    tarantool> msgpack.encode('\xFF\xFE')---- "\xA2\xFF\xFE"...
  • varbinary в MsgPack:

    tarantool> msgpack.encode(varbinary.new('\xFF\xFE'))---- "\xC4\x02\xFF\xFE"...
  • Строка в YAML:

    tarantool> '\xFF\xFE'---- "\xFF\xFE"...
  • varbinary в YAML:

    tarantool> varbinary.new('\xFF\xFE')---- !!binary //4=...

Декодирование бинарных данных в объекты varbinary

Встроенные декодеры также по умолчанию декодируют поля бинарных данных (поля с тегом binary в YAML и типом MP_BIN в MsgPack) в объекты varbinary:

tarantool> varbinary.is(msgpack.decode('\xC4\x02\xFF\xFE'))---- true...tarantool> varbinary.is(yaml.decode('!!binary //4='))---- true...

Справочник по API

Ниже приведен список функций, свойств и связанных объектов varbinary.

Имя

Назначение

varbinary.is()

Проверяет, что аргумент является объектом varbinary

varbinary.new()

Создает объект varbinary

varbinary_object.__eq

Проверяет равенство двух объектов varbinary

varbinary_object.__len

Возвращает длину бинарных данных в байтах

varbinary_object.__tostring

Возвращает бинарные данные в виде обычной строки

Функции

varbinary.is(object)

Проверяет, что переданный объект является объектом varbinary.

Параметры:

  • object (object) — объект для проверки

Возвращает

Является ли переданный объект объектом типа varbinary

Тип возвращаемого значения

boolean

Пример:

varbinary.new(string)

Создает новый объект varbinary из переданной строки.

Параметры:

  • string (string) — строковый объект

Возвращает

Объект varbinary, содержащий строковые данные

Тип возвращаемого значения

cdata

Пример:

local bin = varbinary.new('data')local bin_hex = varbinary.new('\xFF\xFE')-- Check whether a value is a varbinary objectvarbinary.is(bin) -- truevarbinary.is(bin_hex) -- truevarbinary.is(100) -- falsevarbinary.is('data') -- false-- Check varbinary objects equalityprint(bin == varbinary.new('data')) -- trueprint(bin == 'data') -- trueprint(bin ~= 'data1') -- trueprint(bin_hex ~= '\xFF\xFE') -- false-- Check varbinary objects lengthprint(#bin) -- 4print(#bin_hex) -- 2-- Print string representationprint(tostring(bin)) -- datalocal bin2 = varbinary.new(ffi.cast('const char *', 'data'), 4)varbinary.is(bin2) -- trueprint(bin2) -- datalocal luatest = require('luatest')local test_group = luatest.group()test_group.test_varbinary = function()    luatest.assert_equals(varbinary.is(bin), true)    luatest.assert_equals(bin, 'data')    luatest.assert_equals(#bin, 4)    luatest.assert_equals(#varbinary.new('\xFF\xFE'), 2)end

varbinary.new(ptr, size)

Создает новый объект varbinary из указателя cdata и размера.

Параметры:

  • ptr (cdata) — указатель cdata
  • size (number) — размер объекта в байтах

Возвращает

Объект varbinary, содержащий данные

Тип возвращаемого значения

cdata

Пример:

Метаметоды

varbinary_object

varbinary_object.__eq(object)

Проверяет равенство двух объектов varbinary или объекта varbinary и строки. Объект varbinary равен другому объекту varbinary или строке, если он содержит те же данные.

Определяет операторы == и ~= для объектов varbinary.

Тип возвращаемого значения

boolean

Пример:

varbinary_object.__len()

Возвращает длину бинарных данных в байтах.

Определяет оператор # для объектов varbinary.

Тип возвращаемого значения

number

Пример:

varbinary_object.__tostring()

Возвращает бинарные данные в виде обычной строки.

Определяет функцию tostring() для объектов varbinary.

Тип возвращаемого значения

string