Как сделать пространство имен в Lua? - PullRequest
9 голосов
/ 09 декабря 2010

Я хочу связать статическую функцию класса с lua. Как вы знаете, статическая функция класса является чем-то отличным от функции класса. Поэтому код вызова функции в lua должен быть таким ...


//C++
lua_tinker::def(L, "Foo_Func", &Foo::Func);

//Lua
Foo_Func()

Но я хочу вызвать функцию в lua следующим образом


//Lua
Foo.Func()

Есть ли способ использовать это? Таблица Lua может быть полезна. Но я не могу найти никаких ссылок.

Ответы [ 2 ]

10 голосов
/ 09 декабря 2010

Да, это будет сделано с таблицей, и именно так работает большинство модулей при импорте их с помощью require.

Foo = {} -- make a table called 'Foo'
Foo.Func = function() -- create a 'Func' function in stored in the table
    print 'foo' -- do something
end
Foo.Func() -- call the function
4 голосов
/ 09 декабря 2010

Я думаю, вы найдете PiL главу 26.2 наиболее интересной.Если вы скомпилируете вашу библиотеку с тем же именем, что и таблица (например, имя файла == modulename), тогда вы можете просто потребовать () модуль.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...