Как, в частности, работают пользовательские значения в Lua C API и функции lua_newuserdatauv?

В документации для lua_newuserdatauv(lua_State *L, size_t size, int nuvalue) говорится

Эта функция создает и помещает в стек новые полные пользовательские данные с nuvalue связанными значениями Lua, называемыми пользовательскими значениями, а также связанным блоком необработанной памяти с size байтами.

Часть «блок необработанной памяти» кажется ясной: я выделяю блок памяти определенного размера (например, какой-то структуры), затем делаю с ним все, что хочу. Но что такое «пользовательские ценности»?

Вторая часть документации говорит

Пользовательские значения могут быть установлены и прочитаны с помощью функций lua_setiuservalue и lua_getiuservalue.

Означает ли это, что пользовательские данные в основном выделяют дополнительный массив этих пользовательских значений? Каковы эти пользовательские значения? Чем они отличаются от основных типов Lua и чем их использование отличается от этих основных типов?

Руководство не дает много информации об этих пользовательских значениях, а в 4-м издании «Программирование на Lua» говорится, что любые пользовательские данные могут иметь одно единственное значение, связанное с ними, и в Lua 5.2 это должна быть таблица, что на самом деле имеет смысл, но это похоже вся эта информация устарела.

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
0
51
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Часть «блок необработанной памяти» кажется ясной: я выделяю блок памяти определенного размера

Не ты.
Lua является владельцем этого блока памяти.
Lua выделяет его, и Lua автоматически освобождает его как обычный объект GC.

делаю с ним что хочу

Не "что угодно".
Только чтение, запись и передача в качестве параметра.

Но что такое «пользовательские ценности»?

Пользовательское значение — это слот для хранения произвольного значения Lua.

Означает ли это, что пользовательские данные в основном выделяют дополнительный массив этих пользовательских значений?

Да

Что это за пользовательские ценности?
Чем они отличаются от основных типов Lua?

Значение пользователя не является типом данных.
Это частная переменная, созданная для ваших пользовательских данных.
Переменные в Lua могут содержать любое значение Lua. Вам решать, что вы хотите в них хранить и сколько их вам нужно.
Вы можете создать 0 пользовательских значений.

Этот вопрос основан на мнении, но для чего используются эти пользовательские значения? Я имею в виду, что можно выделить память для дополнительных значений, увеличив параметр size. Есть ли что-то уникальное в пользовательских значениях, что делает их более подходящими для некоторых приложений?

Sun of A beach 03.02.2023 22:14
size параметр — это место для хранения переменных C, nuvalue — для хранения переменных Lua. Иногда пользовательские данные должны иметь доступ к некоторым значениям Lua, например, к таблице глобальных значений (_G) или значениям увеличения Lua, общим для всех методов пользовательских данных.
ESkri 04.02.2023 10:58

Другие вопросы по теме