2010-12-09 23 views
9

Quiero vincular la función de clase estática a lua. Como sabe, la función de clase estática es algo diferente con la función de clase. Así código de llamada a la función en lua debería ser así ...¿Cómo hacer espacio de nombres en lua?


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

//Lua 
Foo_Func() 

Pero quiero llamar a la función en lua como esto


//Lua 
Foo.Func() 

¿Hay alguna manera de utilizar de esa manera? La tabla de Lua puede ser útil. Pero no puedo encontrar ninguna referencia.

Respuesta

9

Sí, eso se haría con una tabla y es, de hecho, cómo funcionan la mayoría de los módulos cuando los importa con 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 
+1

Recuerde que si usted declaró: Foo.Func = function (esto) ... fin se le puede llamar: Foo: Func() (nótese la ':'), este pasará la Foo tabla como el primer parámetro de función también. – Goles

4

Creo que encontrará PiL chapter 26.2 más interesante. Si compila su biblioteca con el mismo nombre que la tabla (nombre de archivo == nombre de módulo), puede simplemente requerir() el módulo.