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

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

错误

basic.lua:3'('前面需要'Point'附近的语法错误

还原现场

[C]:0x7ffc269728f0
[C]:在函数'require'中
main.lua:3:在函数'load'中
[C]:在函数'xpcall'中
[C]:在函数'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的类中挣扎很多,所以任何帮助都会感激。

点赞
用户2858170
用户2858170

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

return { function a() end }

请使用

return { a = function() end }

代替。

PlayerAcceleration.AsString()

不起作用。请使用PlayerAcceleration.AsString(PlayerAcceleration)PlayerAcceleration:AsString()

否则,AsString的参数self将为nil,导致你在函数体中尝试索引时出现错误。

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

此外,你正在调用Basic.Point:new,但它并不存在。请先进行Lua入门教程,在继续尝试实现类之前阅读《Programming in Lua》和《Lua参考手册》。

2021-05-28 08:35:30