Чтобы вызвать метод у таблицы, к примеру метод Size() у таблицы CreateDataSource - нужно сделать так:
Код
//index - номер таблицы в стеке Lua
lua_getfield(L, index, "Size"); //"Извлекаем" из "таблицы" функцию отвечающую за возвращения размера этой таблицы.
lua_pushvalue(L, index); //Помещаем копию обьекта таблицы на вершину стека.
int status_lua_pcall = lua_pcall(L, 1, 1, 0); //Вызываем функцию Size
А как сделать тоже самое, но не с методом таблицы, а со строковым полем ? К примеру, как в getQuoteLevel2: [url];
У таблицы есть поле bid_count/bid_count, но такой же код не прокатывает:
Код
lua_getfield(L, index, "bid_count"); //"Извлекаем" из "таблицы" функцию отвечающую за возвращения размера этой таблицы.
lua_pushvalue(L, index); //Помещаем копию обьекта таблицы на вершину стека.
int status_lua_pcall = lua_pcall(L, 1, 1, 0); //Вызываем функцию Size
Ошибка: attempt to call a string value
Пользователь
Сообщений: Регистрация: 30.01.2015
04.11.2022 16:36:25
, Скажите, что я ошибаюсь, но у меня складывается впечатление, что Вы кроме форума больше ничего не изучали по программированию на Си и Lua. Я прав?
Пользователь
Сообщений: Регистрация: 13.05.2022
04.11.2022 16:53:28
Цитата
nikolz написал: , Скажите, что я ошибаюсь, но у меня складывается впечатление, что Вы кроме форума больше ничего не изучали по программированию на Си и Lua. Я прав?
Про Lua - да, Вы правы.
Пользователь
Сообщений: Регистрация: 13.05.2022
04.11.2022 16:54:50
Но, если есть возможность подсказать по данному вопросу, то был бы рад почитать ответ :)
Пользователь
Сообщений: Регистрация: 25.09.2020
04.11.2022 17:35:03
Quikos, Не понимаю, что Вы, собственно, хотите. to call a string value? Для программирования данными я лично использую функцию load, и только для того, чтобы держать некоторые куски кода во внешних файлах. Вызывать строку как функцию здесь, кажется, не пробовал, но в JS частенько этим пользовался, иногда даже сооружая код этой функции (в смысле, строки) на лету. Скорее всего, это должно работать и в Lua.
Пользователь
Сообщений: Регистрация: 13.05.2022
04.11.2022 17:43:19
Цитата
Владимир написал: , Не понимаю, что Вы, собственно, хотите. to call a string value? Для программирования данными я лично использую функцию load, и только для того, чтобы держать некоторые куски кода во внешних файлах. Вызывать строку как функцию здесь, кажется, не пробовал, но в JS частенько этим пользовался, иногда даже сооружая код этой функции (в смысле, строки) на лету. Скорее всего, это должно работать и в Lua.
В первом сдучае я вызываю метод Size() у таблицы CreateDataSource - только делаю в Lua C API - как показал в самом первом сообщении - и это работает.
Теперь мне нужно сделать "то же самое" - но только вызвать не метод у таблицы, а стркоове поле у таблицы возвращенной функцией getQuoteLevel2 - сделать нужно всев том же Lua C API - и вот аналогичный метод с вызовом метода Size() - уже не работает, видимо строковое поле таблицы нужно, как то по другому доставать из таблицы.
Вот я и пытаюсь понять как.
Пользователь
Сообщений: Регистрация: 25.09.2020
04.11.2022 17:52:04
Quikos, Я не знаю, что там за поле CreateDataSource - этим говном я никогда не пользовался и другим не советую. И пишу только на чистом луа - никаких API. Если Вам нужно вызвать строку - насрать, в какой таблице или переменной она лежит или является возвращаемым значением - попробуйте через load.
Пользователь
Сообщений: Регистрация: 13.05.2022
04.11.2022 18:03:21
Цитата
Владимир написал: , Я не знаю, что там за поле CreateDataSource - этим говном я никогда не пользовался и другим не советую. И пишу только на чистом луа - никаких API. Если Вам нужно вызвать строку - насрать, в какой таблице или переменной она лежит или является возвращаемым значением - попробуйте через load.
Что за load ?
Пользователь
Сообщений: Регистрация: 25.09.2020
04.11.2022 18:10:29
Quikos, Функция здешняя. Насколько я помню, недокументированная. for l in F:lines() do s=l:sub(1,1); if s=="_" then load(l:sub(2))();end; end; Т.е. если строка в файле начинается с символа подчёркивания, скрипт выполняет её как если бы она была набита прямо в коде. Этим способом я сообщаю скрипту номер счёта, код клиента, количество денег, который ему разрешено использовать и т.д.
Пользователь
Сообщений: Регистрация: 13.05.2022
04.11.2022 18:23:07
Цитата
Владимир написал: , Функция здешняя. Насколько я помню, недокументированная. for l in F:lines() do s=l:sub(1,1); if s=="_" then load(l:sub(2))();end; end; Т.е. если строка в файле начинается с символа подчёркивания, скрипт выполняет её как если бы она была набита прямо в коде. Этим способом я сообщаю скрипту номер счёта, код клиента, количество денег, который ему разрешено использовать и т.д.
1)Так это не Lua C api.
2)Использовать недокументированные функции - чтобы получить недокументированный результат ? Это странно.
2) А что делать прикажете? Язык - полное говно, и это единственная возможность программирования данными. В одном из самых первых своих постов я писал: УХ ТЫ! А в описании языка (руководство пользователя) нет ни звука ни про unpack, ни про loadstring! А эти вещи, как я предполагаю, должны бы расширять функциональные возможности совершенно диким образом!