Lua MiddleClass。如何从另一个文件传递“self”

时间:2011-09-08 00:05:12

标签: lua corona

说,如果我有两个或更多文件使用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

我知道这个结构或多或少有效,因为我已经在我的项目中使用了很多,但我的问题是我想使用这些自变量。通常一个自我实例在同一个文件内的函数之间传递来做这个,但是当我从另一个文件中做到这时我显然无法传递自己,因为它将是另一个自我,我需要来自文件所在的自我位于。对不起,如果我的问题有点令人困惑。我会尽力澄清任何问题。

3 个答案:

答案 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)。

希望这有帮助!