oop - 如何导出,然后在 Lua 中访问导出的方法

标签 oop lua

我有一个 display.lua 文件,其中有加载一些资源的代码。

----display.lua
Resources = {}

function Resources:new(rootdir)
  local newObj = {image = {}, audio = {}, root = ""}
  newObj.root = rootdir
  return setmetatable(newObj, self)
end

function Resources:getSpriteSheet(name)
    --- etc etc etc
end  

然后我有一个用于存储游戏状态的游戏变量,它位于另一个文件 game.lua 中。
---game.lua
require "display.lua"

function Game:new()
  local newObj = {mode = "", map = {}, player = {}, resources = {}}
  self.__index = self
  return setmetatable(newObj, self)
end

function Game:init()
  self.resources = Resources:new("/home/example/etc/game/")
  local spriteSheet = self.resources:getSpriteSheet("spritesheet.png")
end

我可以通过使用 require 访问资源代码.我的问题是在 Game:init() 内我无法访问 Resources:getSpriteSheet() , lua 解释器提示“试图调用方法 (getSpriteSheet) 一个 nil 值”

我假设在这里我必须导出资源中的方法,但我不知道如何去做,因为我对 Lua 很陌生。

最佳答案

我想你想要 return setmetatable(newObj, {__index = self})而不是 return setmetatable(newObj, self) .

另外,require "display.lua"应该是 require "display"game.lua应该有 Game = {}在顶部的某个地方。通过这些更改,您的示例对我有用。

关于oop - 如何导出,然后在 Lua 中访问导出的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27823398/

相关文章:

c# - Reflection是否违反了封装原则?

java - 数据库和文件持久化之间的接口(interface)

lua - 如何使用 Torch 生成的模型进行预测?

sorting - Lua - 如何按值(value)链对表进行排序

c# - 当不能选择多重继承时如何重用代码?

JavaScript 全局变量的替代方案

Redis事务的Lua脚本

lua - 垃圾收集和字符串到字符串函数的内存

c++ - 为什么 a[] 和 *a 的行为不同?

c++ - 组合 Lua 二进制文件