如何导出,然后在 Lua 中访问导出的方法
How to export, then access exported methods in 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 解释器抱怨 "attempt to call method (getSpriteSheet) a nil value"
我在这里假设我必须导出资源中的方法,但我不知道如何去做,因为我对 Lua.
很陌生
我想你想要 return setmetatable(newObj, {__index = self})
而不是 return setmetatable(newObj, self)
。
此外,require "display.lua"
可能应该是 require "display"
并且 game.lua
应该在顶部某处有 Game = {}
。通过这些更改,您的示例对我有用。
我有一个文件,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 解释器抱怨 "attempt to call method (getSpriteSheet) a nil value"
我在这里假设我必须导出资源中的方法,但我不知道如何去做,因为我对 Lua.
很陌生我想你想要 return setmetatable(newObj, {__index = self})
而不是 return setmetatable(newObj, self)
。
此外,require "display.lua"
可能应该是 require "display"
并且 game.lua
应该在顶部某处有 Game = {}
。通过这些更改,您的示例对我有用。