В документации для lua_newuserdatauv(lua_State *L, size_t size, int nuvalue)
говорится
Эта функция создает и помещает в стек новые полные пользовательские данные с
nuvalue
связанными значениями Lua, называемыми пользовательскими значениями, а также связанным блоком необработанной памяти сsize
байтами.
Часть «блок необработанной памяти» кажется ясной: я выделяю блок памяти определенного размера (например, какой-то структуры), затем делаю с ним все, что хочу. Но что такое «пользовательские ценности»?
Вторая часть документации говорит
Пользовательские значения могут быть установлены и прочитаны с помощью функций lua_setiuservalue и lua_getiuservalue.
Означает ли это, что пользовательские данные в основном выделяют дополнительный массив этих пользовательских значений? Каковы эти пользовательские значения? Чем они отличаются от основных типов Lua и чем их использование отличается от этих основных типов?
Руководство не дает много информации об этих пользовательских значениях, а в 4-м издании «Программирование на Lua» говорится, что любые пользовательские данные могут иметь одно единственное значение, связанное с ними, и в Lua 5.2 это должна быть таблица, что на самом деле имеет смысл, но это похоже вся эта информация устарела.
Часть «блок необработанной памяти» кажется ясной: я выделяю блок памяти определенного размера
Не ты.
Lua является владельцем этого блока памяти.
Lua выделяет его, и Lua автоматически освобождает его как обычный объект GC.
делаю с ним что хочу
Не "что угодно".
Только чтение, запись и передача в качестве параметра.
Но что такое «пользовательские ценности»?
Пользовательское значение — это слот для хранения произвольного значения Lua.
Означает ли это, что пользовательские данные в основном выделяют дополнительный массив этих пользовательских значений?
Да
Что это за пользовательские ценности?
Чем они отличаются от основных типов Lua?
Значение пользователя не является типом данных.
Это частная переменная, созданная для ваших пользовательских данных.
Переменные в Lua могут содержать любое значение Lua.
Вам решать, что вы хотите в них хранить и сколько их вам нужно.
Вы можете создать 0 пользовательских значений.
size
параметр — это место для хранения переменных C, nuvalue
— для хранения переменных Lua. Иногда пользовательские данные должны иметь доступ к некоторым значениям Lua, например, к таблице глобальных значений (_G
) или значениям увеличения Lua, общим для всех методов пользовательских данных.
Этот вопрос основан на мнении, но для чего используются эти пользовательские значения? Я имею в виду, что можно выделить память для дополнительных значений, увеличив параметр
size
. Есть ли что-то уникальное в пользовательских значениях, что делает их более подходящими для некоторых приложений?