Lua:来自C API的新功能

时间:2014-06-16 21:00:08

标签: c oop scripting lua lua-api

我正在为我的游戏引擎编写脚本层。目前我使用脚本作为类,向名为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中,这样就不需要将其添加到我为此系统编写的每个脚本文件中?

1 个答案:

答案 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等: