О бедной LUA замолвите слово
От: R1K0 Россия  
Дата: 19.06.09 10:59
Оценка:
Всем привет. Вот просмотрел все темы данной ветки.
Наверно 95% — Python, 4% — Ruby и 1% — все остальное.

Почему же все так обходят стороной LUA. Сам с ним работаю уже год и не могу сказать ничего плохого.
Или же все там настолько просто и понятно, что даже и говорить не о чем ?

Поясните, пожалуйста — почему же нет вопросов
Re: О бедной LUA замолвите слово
От: neFormal Россия  
Дата: 19.06.09 11:07
Оценка: 1 (1) +1
Здравствуйте, R1K0, Вы писали:

RK>Поясните, пожалуйста — почему же нет вопросов


с ним пока нет проблем, о которых хотелось бы спросить..
да и проходимость этого раздела пока ещё небольшая.. даже 95% питона — это всего то с десяток топиков..
...coding for chaos...
Re[2]: О бедной LUA замолвите слово
От: R1K0 Россия  
Дата: 19.06.09 11:49
Оценка:
Здравствуйте, neFormal, Вы писали:

F>с ним пока нет проблем, о которых хотелось бы спросить..

F>да и проходимость этого раздела пока ещё небольшая.. даже 95% питона — это всего то с десяток топиков..

Правда?
А я вот сейчас вспомнил один момент — в свое время долго с ним бился, но так и не решил — да и сроки жали

Ситуация такая. Есть в LUA такая дополнительная библиотека Socket. Ну, думаю понятно, зачем она нужна.
Так вот проблема была в следующем.

LUA код:

package.path = ".\\?.lua;D:\\Program Files\\Lua\\5.1\\lua\\?.lua;D:\\Program Files\\Lua\\5.1\\lua\\?\\init.lua;D:\\Program Files\\Lua\\5.1\\?.lua;D:\\Program Files\\Lua\\5.1\\?\\init.lua"
package.cpath = ".\\?.dll;.\\?51.dll;D:\\Program Files\\Lua\\5.1\\?.dll;D:\\Program Files\\Lua\\5.1\\?51.dll;D:\\Program Files\\Lua\\5.1\\clibs\\?.dll;D:\\Program Files\\Lua\\5.1\\clibs\\?51.dll;D:\\Program Files\\Lua\\5.1\\loadall.dll;D:\\Program Files\\Lua\\5.1\\clibs\\loadall.dll"


function GetRequest()
    local http = require("socket.http")
    print("http", http)
    a, b, h, g = http.request("//192.168.10.36")
    return a, b, h, g
end

print(GetRequest())


Если запускать его в самом LUA, то проблем никаких — работает как и положено.

А вот если я захочу пустить его с помощью LUA C API (или же, как вариант, LUABind), то скрипт просто не работает.
Вся гадость происходит в строчке

    a, b, h, g = http.request("//192.168.10.36")


Данный код должен выводить html код страницы.

Сталкивался кто-нибудь с таким или же... ??
Re[3]: О бедной LUA замолвите слово
От: IPv6 Россия http://www.lumarnia.com/
Дата: 19.06.09 12:47
Оценка:
Здравствуйте, R1K0, Вы писали:

RK>Сталкивался кто-нибудь с таким или же... ??

сишный код в студию. явно со стеком чтото напутал. в конце концов там все в сырцах, поставь брикпоин в Socket и смотри
Re: О бедной LUA замолвите слово
От: IPv6 Россия http://www.lumarnia.com/
Дата: 19.06.09 12:49
Оценка:
Здравствуйте, R1K0, Вы писали:

RK>Поясните, пожалуйста — почему же нет вопросов

Работал с питоном и луа, с луа никогда проблем никаких небыло, только въехать в синтаксис и все
а кому нужна луашка но "под С++" — рекомендую squirrel, тоже используем, тоже клево
Re[4]: О бедной LUA замолвите слово
От: R1K0 Россия  
Дата: 19.06.09 13:54
Оценка:
Здравствуйте, IPv6, Вы писали:

IP>Здравствуйте, R1K0, Вы писали:


RK>>Сталкивался кто-нибудь с таким или же... ??

IP> сишный код в студию. явно со стеком чтото напутал. в конце концов там все в сырцах, поставь брикпоин в Socket и смотри


Собственно вот. На чистом C API простейший вариант:


int main()
{
    lua_State * lua = lua_open();
    luaL_openlibs(lua);

    if (luaL_loadfile(lua, "testLib.lua") != 0)
        {
        printf("ERROR : BAD LUA FILE\n");
        printf("\t%s\n", lua_tostring(lua, -1));
        lua_pop(lua, 1);
        system("pause");

        return 0;
    }

    lua_getglobal(lua, "GetRequest");
    if (lua_pcall(lua, 0, 1, 0) != 0)
    {
        printf("error running function `GetRequest': %s\n", lua_tostring(lua, -1));
        system("PAUSE");

        return 0;
    }

    lua_close(lua);
    system("PAUSE");

    return 1;
}


Насчет этой строки

    if (lua_pcall(lua, 0, 1, 0) != 0)


Какие только комбинации не пробовал — пусто
Смысл её насколько помню (делал несколько месяцев назад, а сейчас только через LUABind работаю) означает, что я жду, что мне вернуть первый из списка return данной LUA-функции.
Re[5]: О бедной LUA замолвите слово
От: R1K0 Россия  
Дата: 19.06.09 14:44
Оценка:
Any ideas ? ))
Re[5]: О бедной LUA замолвите слово
От: z00n  
Дата: 19.06.09 17:23
Оценка:
Здравствуйте, R1K0, Вы писали:
RK>
RK>    if (luaL_loadfile(lua, "testLib.lua") != 0)
RK>        {
RK>        printf("ERROR : BAD LUA FILE\n");
RK>        printf("\t%s\n", lua_tostring(lua, -1));
RK>        lua_pop(lua, 1);
RK>        system("pause");

RK>        return 0;
RK>    }
+++>    else
+++>        lua_pcall(lua,0,0,0); // выполняем загруженный модуль.
RK>    lua_getglobal(lua, "GetRequest");
RK>


Проблема в том, что вы не совсем понимаете, что такое loadfile/luaL_loadfile — файл компилируется и превращается в функцию, лежащую на вершине стека. Дальше вы можете ее вызвать, в том числе, передав аргументы и.т.д.
Если вам просто нужно выполнить что-то лежащее в файле — используте dofile/luaL_dofile. luaL_dofile — это элементарный макрос:

#define luaL_dofile(L, fn) \
    (luaL_loadfile(L, fn) || lua_pcall(L, 0, LUA_MULTRET, 0))



http://www.lua.org/manual/5.1/manual.html#luaL_dofile
http://www.lua.org/manual/5.1/manual.html#pdf-dofile
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.