如何在 Lua (Love2D) 的库中定义一个类?
Posted
技术标签:
【中文标题】如何在 Lua (Love2D) 的库中定义一个类?【英文标题】:How to define a class within a library in 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:new1, 2;
PlayerVelocity = Basic.Point:new0, 0;
PlayerPosition = Basic.Point:new0, 0;
love.graphics.print(PlayerAcceleration.AsString(), 0, 0, 0, 1, 1, 0, 0, 0, 0);
end;
我在 Lua 的课程上遇到了很多困难,因此我们将不胜感激。
【问题讨论】:
【参考方案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”方法、连接和构造函数,因为代码在定义类之前就失败了,我什至没有意识到它们是一个问题。不过谢谢,看来我学到的东西比我原本打算的要多!以上是关于如何在 Lua (Love2D) 的库中定义一个类?的主要内容,如果未能解决你的问题,请参考以下文章