【问题标题】:How to split functions of a single class across multiple files in Lua?如何在 Lua 中将单个类的函数拆分为多个文件?
【发布时间】:2016-08-26 17:48:40
【问题描述】:

在 Lua 中跨文件拆分单个类的多个函数的正确方法是什么?

在以下示例中,我想将数学和拼写函数拆分到单独的文件中。

CardsScene = Core.class(Sprite) 

function CardsScene:basicMathInit()
end

function CardsScene:basicMathIdle()
end

function CardsScene:basicMathAnswer()
end

function CardsScene:basicSpellingInit()
end

function CardsScene:basicSpellingIdle()
end

function CardsScene:basicSpellingAnswer()
end

【问题讨论】:

    标签: lua


    【解决方案1】:

    假设您没有在任何文件中将 CardsScene 声明为本地文件,则它是全局文件。

    在您设置其值后运行的任何代码都将使用由Core.class(Sprite) 创建的表。在 Lua 中,函数没有被声明。它们是在运行时创建的值。当您运行如下语句时:

    function CardsScene:basicMathAnswer()
    end 
    

    它创建一个函数值并将其分配给表中的 basicMathAnswer 字段,该字段由表达式 CardsScene 当前计算的值所引用。

    因此,继续将任何或所有带有函数定义和赋值的语句移动到任意数量的文件中。请确保在分配全局变量CardsScene 之后全部执行它们。

    【讨论】:

      【解决方案2】:

      熟悉 Lua 模块和标准函数require

      https://www.lua.org/pil/8.1.html https://www.lua.org/manual/5.3/manual.html#pdf-require

      你可以像函数一样执行 Lua 文件。

      文件 A.lua:

      print("hello this is from file A")
      

      文件 B.lua:

      require("A")
      print("and this is from file B")
      

      运行 B.lua 后,您将获得以下输出:

      你好,这是来自文件 A

      这是来自文件 B

      一旦您了解发生了什么,您就可以跨多个文件实现表成员。

      我建议不要将一个表拆分到多个文件中。我宁愿有一个单独的数学和拼写表,以及将它们组合到 CardsScene 的第三个表。不仅仅是两个人在同一张桌子上工作。

      【讨论】:

      • 我对@9​​87654326@很熟悉,但以前没有这么用过。通常我会分班;在我目前的情况下,虽然我正在一个场景管理系统中工作,该系统需要大量时间和开销来转换场景。在这种情况下,切换场景将是一种难以忍受的用户体验,因此我正在寻找其他选项,以保持我的代码井井有条且易于维护。
      • @bigtunacan 不确定我是否完全理解您想要实现的目标。您不必切换场景。只有 1 个接口从 2 个必需文件中获取它的实现。
      猜你喜欢
      • 2016-08-09
      • 2014-07-17
      • 2014-07-15
      • 2019-11-26
      • 1970-01-01
      • 2016-05-05
      • 1970-01-01
      • 2019-09-05
      • 2021-11-18
      相关资源
      最近更新 更多