如何在 Lua (Love2D) 库中定义类?

Epi*_*oeR 3 lua module class love2d

我尝试在名为“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'
Run Code Online (Sandbox Code Playgroud)

这是我的“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;

};
Run Code Online (Sandbox Code Playgroud)

这是我的“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;
Run Code Online (Sandbox Code Playgroud)

我在 Lua 的课程上遇到了很多困难,所以任何帮助将不胜感激。

Pig*_*let 5

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

return { function a() end }
Run Code Online (Sandbox Code Playgroud)

使用

return { a = function() end }
Run Code Online (Sandbox Code Playgroud)

反而。

PlayerAcceleration.AsString()
Run Code Online (Sandbox Code Playgroud)

不管用。要么使用PlayerAcceleration.AsString(PlayerAcceleration)PlayerAcceleration:AsString()

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

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

此外,您正在调用的Basic.Point:new内容不存在。在继续尝试实现类之前,请先完成 Lua 初学者教程,阅读 Lua 编程和 Lua 参考手册。