我正在为我的游戏引擎编写脚本层。目前我使用脚本作为类,向名为new的“表”添加方法。该函数基本上创建了Class的实例化副本。当需要脚本实例时,我从C API调用此函数。
function PlayerController:new(o)
print('A new instance of the PlayerController has been created');
o = o or {}
setmetatable(o, self)
self.__index = self
return o
end
我的问题是:如何将上述Lua代码移到C中,这样就不需要将其添加到我为此系统编写的每个脚本文件中?
答案 0 :(得分:0)
您可能需要创建类声明函数来为您执行此操作。这是一个完整的“helper.lua”文件:
local lib = {type = 'helper'}
local CALL_TO_NEW = {__call = function(lib, ...) return lib.new(...) end}
function lib.class(class_name, tbl)
local lib = tbl or {}
lib.type = class_name
lib.__index = lib
-- Default "new" method
function lib.new()
return setmetatable({}, lib)
end
-- Enable foo.Bar() instead of foo.Bar.new()
return setmetatable(lib, CALL_TO_NEW)
end
return lib
用法示例:
local helper = require 'helper'
local lib = helper.class 'foo.Bar'
-- optional new function if there needs to be some argument handling
function lib.new(args)
local self = {}
-- ...
return setmetatable(self, lib)
end
return lib
<强> lub.class 强>
这是一个真实世界的最小类声明和设置系统。它用于许多luarocks,如xml,yaml,dub等: