Проблемы с интерфейсом

У меня есть некоторые проблемы с библиотекой C# luainterface:

1. Итак, я загружаю скрипт и извлекаю его функции следующим образом:

LuaFunction function = lua.GetFunction("Update"); 

Но что делать, если я загружаю два разных скрипта, которые содержат функции с одинаковыми именами. Как извлечь две разные функции с одинаковыми именами из script1 и script2?

2. Если я загружаю функции в память, можно ли выделить конкретную, а не все функции?

3. Когда я использую метод Lua.DoFile, я хочу выполнить определенную функцию из файла. Есть идеи, как это сделать?

редактировать

2. Я обнаружил, что могу сделать что-то подобное

string f = @"
        function hh()
          end";

        var result = lua.DoString(f)[0] as LuaFunction;

но по какой-то причине я получаю нулевое исключение. Есть идеи почему?

1 ответ

Решение

DoString вернет то, что возвращает ваш скрипт.

lua.DoString ("return 10+10")[0]; // <-- will return Double. 20

Если вы хотите получить свою функцию Lua как объект LuaFunction, вам нужно вернуть свою функцию, или, что еще лучше, просто используйте оператор [], чтобы получить глобальное значение hh.

lua.DoString ("function hh() end");
var hh = lua["hh"] as LuaFunction;
hh.Call ();

Вот пример: https://github.com/codefoco/NLuaBox/blob/master/NLuaBox/AppDelegate.cs#L46(но с использованием NLua вместо LuaInterface)

И не забудьте отпустить вызов LuaFunction Dispose когда вам больше не нужна функция.

Другие вопросы по тегам