Lua:从C API中创建新的对象。

我正在为我的游戏引擎编写脚本层。目前我正在使用脚本作为类,在“Table”中添加一个名为 new 的方法。这个函数基本上创建了一个实例化的类的副本。当需要脚本实例时,我从 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 中,以便不必在我为此系统编写的每个脚本文件中添加它?

点赞
用户252124
用户252124

你可能想要创建一个类声明函数来为您完成此操作。这是一个完整的“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

  -- 默认的“new”方法
  function lib.new()
    return setmetatable({}, lib)
  end

  -- 允许使用 foo.Bar() 替代 foo.Bar.new()
  return setmetatable(lib, CALL_TO_NEW)
end
return lib

用法示例:

local helper = require 'helper'
local lib = helper.class 'foo.Bar'

-- 如果需要一些参数处理,可以选择一个新函数
function lib.new(args)
  local self = {}
  -- ...
  return setmetatable(self, lib)
end

return lib

lub.class

这是一个真正的世界上最小的类声明和设置系统。它被用于许多 luarocks 中,如 xml、yaml、dub 等:

2014-08-15 06:36:02