【问题标题】:Lua MiddleClass. How to pass "self" from another fileLua 中级。如何从另一个文件传递“自我”
【发布时间】:2012-04-15 22:36:05
【问题描述】:

说,如果我有两个或更多使用中间类扩展的文件或多或少像这样。我省略了一些明显的中间类实现代码。

文件 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

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

【问题讨论】:

    标签: lua coronasdk


    【解决方案1】:

    我不知道什么是中产阶级,但我认为你自己搞糊涂了。 self 在 Lua 中的工作方式是一个看起来像 function Battlefield:attack()function Battlefield.attack(self) 完全一样的函数。换句话说,self 只是函数的隐式第一个参数。并且方法调用 instance:attack() 完全等同于 instance.attack(instance)(尽管如果您在那里使用表达式,它不会计算 instance 两次)。

    换句话说,BattlefieldInstance:attack() 应该做你想做的事。

    【讨论】:

      【解决方案2】:

      'self' 是一个关键字,意思是'当前对象'。所以在战地函数的情况下,函数内部的'self.varA'与函数外部的'Battlefield.varA'是同一个变量。

      【讨论】:

        【解决方案3】:

        Middle Class 是我第一次看到为 Love2D 开发的库;我假设它与电晕使用的是同一个? (我已经用过 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)。

        希望这会有所帮助!

        【讨论】:

          猜你喜欢
          • 2017-05-23
          • 2012-04-02
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-10-08
          相关资源
          最近更新 更多