Top.Mail.Ru
space_object:user_defined() | Tarantool
Tarantool
Узнайте содержание релиза 2.8
Вложенный модуль box.space space_object:user_defined()

space_object:user_defined()

object space_object
space_object:user_defined()

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

  1. создать Lua-функцию,
  2. добавить имя функции в заданную глобальную переменную с типом «таблица» (table),
  3. впоследствии в любое время, пока работает сервер, вызвать функцию с помощью объект_спейса:имя-функции([параметры]).

Задана глобальная переменная box.schema.space_mt. Метод, добавленный в box.schema.space_mt, будет доступен для всех спейсов.

Можно также сделать задаваемый пользователем метод доступным только для одного индекса путем вызова getmetatable(объект_спейса) и последующего добавления имени функции в метатаблицу. См. также пример для index_object:user_defined().

Параметры:

Пример:

-- Доступный для любого спейса, без параметров.
-- После таких запросов значение глобальной переменной global_variable будет 6.
box.schema.space.create('t')
box.space.t:create_index('i')
global_variable = 5
function f(space_arg) global_variable = global_variable + 1 end
box.schema.space_mt.counter = f
box.space.t:counter()