说,如果我有两个或更多文件使用middleclass扩展或多或少像这样。我省略了一些明显的middleclass实现代码。
档案A:
function Battlefield:initialize()
self.varA
self.varB
end
function Battlefield:attack()
--I want to use self.varA here
end
档案B
BattlefieldInstance = Battlefield:new()
function doStuff()
BattlefieldInstance:attack()
end
我知道这个结构或多或少有效,因为我已经在我的项目中使用了很多,但我的问题是我想使用这些自变量。通常一个自我实例在同一个文件内的函数之间传递来做这个,但是当我从另一个文件中做到这时我显然无法传递自己,因为它将是另一个自我,我需要来自文件所在的自我位于。对不起,如果我的问题有点令人困惑。我会尽力澄清任何问题。
答案 0 :(得分:3)
我不知道middleclass是什么,但我认为你自己很困惑。 self
在Lua中的工作方式是function Battlefield:attack()
看起来与function Battlefield.attack(self)
完全相同的函数。换句话说,self
只是函数的隐式第一个参数。方法调用instance:attack()
完全等同于instance.attack(instance)
(但如果您在其中使用表达式,它将不会评估instance
两次。)
换句话说,BattlefieldInstance:attack()
应该完全符合您的要求。
答案 1 :(得分:0)
'self'是一个关键字,意思是'当前对象'。因此,在战场功能的情况下,函数内部的“self.varA”与函数外部的“Battlefield.varA”变量相同。
答案 2 :(得分:0)
Middle Class是我第一次看到为Love2D开发的lib;我假设它与电晕使用的相同吗? (我已经使用了Corona ......但不是Middle Class的OOP系统)
无论哪种方式,您也可以尝试直接使用元表,如下所示:
---FILE A---
Battlefield= {}
Battlefield.__index = Battlefield
function Battlefield:new()
return setmetatable({var1 = 'somedata', var2 = 'somemodata', var3 = 'lotsodata'}, Battlefield)
end
function Battlefield:attack()
print(self.var1)
end
---FILE B---
BattlefieldInstance = Battlefield:new( )
function doStuff()
BattlefieldInstance:attack()
end
然后打印出self.var1(somedata)。
希望这有帮助!