Перенос пользовательских данных в Lua без C (или сколько C мне нужно, чтобы научиться этому)

Привет и заранее спасибо. Я пытаюсь понять, есть ли способ избежать изучения C (которого я вообще не знаю), чтобы превратить пользовательские данные в таблицу Lua.

Я использую приложение, которое позволяет пользователям писать надстройки с использованием сценариев Lua. Эти надстройки могут запрашивать базовые данные приложения. Однако результаты запроса возвращаются как пользовательские данные, и мне нужно, чтобы они были доступны в скрипте.

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

Выполняет назначенную в данный момент строку запроса и использует результаты для создания либо объекта DataSet, если возвращено несколько наборов результатов, либо DataTable, если возвращен один набор результатов или нет.

В моем случае я получу несколько наборов результатов, я называю это пользовательскими данными, потому что это то, что я получаю, когда вызываю type() в результате запроса.

Я просмотрел документацию Lua, которая кажется полезной, но в ней отсутствуют знакомство с C Я понятия не имею, на что я смотрю. Метатаблица сообщает мне, что у меня есть доступ к метаметодам __index, __newindex, __tostring и __gc. Вызов tostring дает мне семизначное целое число, которое (я думаю) совершенно не связано с моими данными. Возможно, я даже не получаю обратно те данные, которые мне нужны, но я не могу придумать способ это проверить. Интернет-ресурсы либо говорят, что это невозможно сделать, либо предоставляют решения на C, которые, вероятно, умные, чистые и потрясающие, но я их не понимаю.

Поэтому я ищу более подробное руководство о том, могу ли я это сделать, если есть способ сделать это без C (или просто слепо скопировав чужой код), или - если мне нужно использовать C для этого - если мы говорим о 90-минутном или 7-часовом курсе Lynda Introduction to C, чтобы добраться туда, где мне нужно быть?

(и извиняюсь, если этим вопросом я случайно нарушил какие-либо нормы сообщества ... это мой первый пост)


person Liam    schedule 05.01.2018    source источник
comment
Обычно пользовательские данные имеют некоторые свойства и методы, доступные для сценария Lua. Попросите автора пользовательских данных предоставить Lua API доступ к пользовательским данным.   -  person Egor Skriptunoff    schedule 05.01.2018
comment
Вам следует удалить тег c, поскольку этот вопрос, по-видимому, касается того, как интерпретировать общий объект Lua userdata в сценарии Lua, который не имеет ничего общего с C.   -  person Mark Benningfield    schedule 05.01.2018
comment
Спасибо за оба за комментарии. Я удалил тег c. Основываясь на том, что вы оба сказали, кажется, что в lua должен быть способ прямого доступа к пользовательским данным, но я смог найти только ресурсы в Интернете, которые описывают, как писать методы на C, которые затем прикрепляются к метаданным Lua. стол. По крайней мере, это то, что я вынес из ответа, предоставленного здесь. Единственные методы, которые уже существуют для данных, - это те, о которых я упоминал выше.   -  person Liam    schedule 05.01.2018
comment
Как отметил Егор, если приложение, которое вы используете, предоставляет объект userdata, тогда в документации для скриптовой части приложения следует указать, какие методы определены для использования с этим объектом.   -  person Mark Benningfield    schedule 05.01.2018
comment
К сожалению, документация, предоставляемая приложением, в этой области немного неоднородна. Я пытался связаться с компанией напрямую, но по ряду не связанных с этим причин, связанных с новыми облачными продуктами, они не были заинтересованы в предоставлении более глубокой поддержки этой функции этого приложения. Я отредактировал вопрос, включив в него то, что предоставлено в документации, и буду продолжать просматривать его, чтобы увидеть, не пропустил ли я решение. Спасибо еще раз!   -  person Liam    schedule 05.01.2018
comment
В Lua нет возможности получить доступ к объекту пользовательских данных, потому что эти объекты поступают извне. Либо это легкие пользовательские данные, и в этом случае это указатель, который вам не пригодится, либо правильные пользовательские данные, которые должны иметь метатаблицу, которую вы можете проверить - используйте getmetatable и посмотрите, что внутри .   -  person IS4    schedule 07.01.2018
comment
Спасибо @ IllidanS4, глядя на метатаблицу, я вижу функцию с именем __newindex, пустую таблицу с именем cache, что-то с ключом типа userdata и значением 1, функцию __tostring, функцию __index и функцию __gc. Думаю, пришло время сказать своему боссу, что я не смогу выполнить эту работу, но я ценю время каждого.   -  person Liam    schedule 08.01.2018
comment
Это действительно хорошо. __newindex вызывается, когда вы назначаете v[k], а __index вызывается, когда вы извлекаете v[k] (v - значение, а k - ключ). К сожалению, фактическая функция, вероятно, будет реализована внутри, поэтому вы можете только догадываться об именах методов. Конечно, вы можете найти имена, если использовали некоторые инструменты отладки, но сам Lua не обеспечивает отражения для внешних объектов (поскольку его не может быть). Функция __index зависит от того, даст ли она вам функцию или нет, но ее наличие - это хорошо, это означает, что есть что-то, что можно использовать.   -  person IS4    schedule 08.01.2018
comment
Что ж, это обнадеживает! Спасибо за быстрый ответ, и я потрачу еще немного времени на изучение того, что там может быть.   -  person Liam    schedule 08.01.2018