Где хранятся «глобальные» локальные значения Lua? - PullRequest
0 голосов
/ 29 июня 2018

Мне нужно вызвать функцию Lua из C, и пока эта функция является глобальной, я могу найти ее в глобальной таблице, но если она объявлена ​​локальной, как я могу отправить адрес в стеке для ее вызова?

function MyGlobal()
  print("Global")
end

local function MyLocalGlobal()
  print("Local")
end

Вызов MyGlobal() из C не проблема, он отлично работает. Я ищу функцию в глобальной таблице.

Но как мне позвонить MyLocalGlobal() из C? Его нет в глобальной таблице, но где он находится и как я могу отправить адрес?

Я использую Lua 5.3.4.

1 Ответ

0 голосов
/ 29 июня 2018

Функция MyLocalGlobal() на самом деле не глобальная. Это локально для анонимной функции, которая представляет весь кусок загруженного кода.

Что на самом деле происходит, когда вы звоните lua_load/lua_loadstring:

return function(...) -- implicit functionality outside of code to be loaded

    -- your file starts here --
    function MyGlobal()
      print("Global")
    end

    local function MyLocalGlobal()
      print("Local")
    end
    -- file ends here --

end               -- implicit functionality outside of code to be loaded

Вы можете получить MyLocalGlobal позже либо с помощью средств отладки (с помощью библиотеки 'debug'), либо вы должны явно вернуть требуемый интерфейс в конце этого исходного файла и сразу же после этого получить / прочитать интерфейс на нативной стороне. Вы загрузили / выполнили чанк.

...