space_object:user_defined()
-
object
space_object
-
space_object:
user_defined
() Пользователи могут сами определять любые желаемые функции и связывать их со спейсами: фактически они могут создавать собственные методы для работы со спейсом. Это можно сделать так:
- создать Lua-функцию,
- добавить имя функции в заданную глобальную переменную с типом «таблица» (table),
- впоследствии в любое время, пока работает сервер, вызвать функцию с помощью
объект_спейса:имя-функции([параметры])
.
Задана глобальная переменная
box.schema.space_mt
. Метод, добавленный вbox.schema.space_mt
, будет доступен для всех спейсов.Можно также сделать задаваемый пользователем метод доступным только для одного индекса путем вызова
getmetatable(объект_спейса)
и последующего добавления имени функции в метатаблицу. См. также пример для index_object:user_defined().Параметры: - index_object (index_object) – ссылка на объект.
- any-name (any-type) – то, что определяет пользователь
Пример:
-- Доступный для любого спейса, без параметров. -- После таких запросов значение глобальной переменной 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()
-