2016-08-30 3 views

ответ

3

A loaded кусок - это обычная функция. Загрузка модуля из C можно рассматривать так:

return (function() -- this is the chunk compiled by load 

    -- foo.lua 
    return function (i) 
     return i 
    end 

end)() -- executed with call/pcall 

Все, что вам нужно сделать, это загрузить кусок и назвать его, возвращаемое значение является ваша функция:

// load the chunk 
if (luaL_loadstring(L, script)) { 
    return luaL_error(L, "Error loading script: %s", lua_tostring(L, -1)); 
} 

// call the chunk (function will be on top of the stack) 
if (lua_pcall(L, 0, 1, 0)) { 
    return luaL_error(L, "Error running chunk: %s", lua_tostring(L, -1)); 
} 

// call the function 
lua_pushinteger(L, 42); // function arg (i) 
if (lua_pcall(L, 1, 1, 0)) { 
    return luaL_error(L, "Error calling function: %s", lua_tostring(L, -1)); 
} 
+0

Ааа, спасибо, это действительно полезная семантика «куска». На самом деле, одна из версий, которые я пробовал до сих пор, была схожей, только то, что я первый мой вызов был 'lua_pcall (L, 0, 0)', который отбросил результат. Это оставило меня в недоумении, почему не было возврата. –

Смежные вопросы