【问题标题】:How to define a class within a library in Lua (Love2D)?如何在 Lua (Love2D) 的库中定义一个类?
【发布时间】:2021-08-16 11:26:33
【问题描述】:

我尝试在名为“Point”的名为“basic.lua”的文件上定义我的类,并尝试在文件“main.lua”上实现它,但我不断收到此错误:

Error

Syntax error: basic.lua:3: '(' expected near 'Point'



Traceback

[C]: at 0x7ffc269728f0
[C]: in function 'require'
main.lua:3: in function 'load'
[C]: in function 'xpcall'
[C]: in function 'xpcall'

这是我的“basic.lua”代码

return {

  function Point(self, x, y)
    local Point = {

      x = x;
      y = y;

      AsString = function(self)
          print("{x: " + self.x + ", y: " + self.y + "}");
      end;
      
    }
    return Point;
  end;

};

这是我的“main.lua”代码

function love.load()

    local Basic = require("basic");

    PlayerAcceleration = Basic.Point:new{1, 2};
    PlayerVelocity = Basic.Point:new{0, 0};
    PlayerPosition = Basic.Point:new{0, 0};

    love.graphics.print(PlayerAcceleration.AsString(), 0, 0, 0, 1, 1, 0, 0, 0, 0);

end;

我在 Lua 的课程上遇到了很多困难,因此我们将不胜感激。

【问题讨论】:

    标签: class module lua love2d


    【解决方案1】:

    您的模块返回一个表,但在该表构造函数中您尝试定义一个全局函数Point。您不能创建这样的表字段。这是无效的语法。

    return { function a() end }
    

    使用

    return { a = function() end }
    

    改为。

    PlayerAcceleration.AsString()
    

    不会工作。使用PlayerAcceleration.AsString(PlayerAcceleration)PlayerAcceleration:AsString()

    否则AsString 的参数self 将为零,导致当您尝试在函数体中对其进行索引时出错。

    "{x: " + self.x + ", y: " + self.y + "}" 不是在 Lua 中连接字符串的方式。使用 Lua 的连接运算符 .. 而不是 +

    您还打电话给不存在的Basic.Point:new。在继续尝试实现类之前,请先阅读 Lua 初学者教程,阅读 Lua 编程和 Lua 参考手册。

    【讨论】:

    • 是的,我在起草此文件时注意到,我没有将“AsString”添加到“PlayerAcceleration”中,所以我只是将它与任何其他编程语言(使用“。”)由于我没有调试“AsString”方法、连接和构造函数,因为代码在定义类之前就失败了,我什至没有意识到它们是一个问题。不过谢谢,看来我学到的东西比我原本打算的要多!
    猜你喜欢
    • 2014-01-01
    • 2013-05-12
    • 2022-12-18
    • 2014-06-10
    • 2021-03-11
    • 2016-04-21
    • 2021-12-13
    • 2017-09-19
    • 2013-10-26
    相关资源
    最近更新 更多