2010-12-09 19 views
9

Ich möchte statische Klassenfunktion an lua binden. Wie Sie wissen, ist die statische Klassenfunktion etwas anderes als die Klassenfunktion. So Funktionsaufrufcode in lua sollte so sein ...Wie man Namespace in lua macht?


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

//Lua 
Foo_Func() 

Aber ich möchte Funktion in Lua nennen wie diese


//Lua 
Foo.Func() 

Gibt es eine Möglichkeit, so zu benutzen? Lua Tabelle könnte hilfreich sein. Aber ich kann keine Referenzen finden.

Antwort

9

Ja, das würde mit einer Tabelle gemacht werden und ist in der Tat, wie die meisten Module funktionieren, wenn Sie sie mit require importieren.

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 
+1

Denken Sie daran, dass, wenn Sie erklärt: Foo.Func = function (this) ... end Sie es nennen kann: Foo: Func() (die Bekanntmachung ':'), wird dies die Foopass Tabelle als der erste Funktionsparameter auch. – Goles

4

Ich denke, Sie finden PiL chapter 26.2 am interessantesten. Wenn Sie Ihre Bibliothek unter dem gleichen Namen wie die Tabelle kompilieren (also filename == modulename), können Sie einfach() das Modul anfordern.