【发布时间】:2018-09-23 17:51:03
【问题描述】:
我正在尝试从该视频中获取一些代码:Lua Tutorial 9: OOP and Metatables 视频大约 11 分钟后
我是 lua 新手,但我有编程经验,所以在学习了语言的基础知识之后,我想我会学习一些方法来做 oop。 在我的代码中,我已经用 Vector2 替换了 vector3,因为我现在需要在 2d 中工作。 Lua 强大的表格是我真正需要理解的东西,才能更流利地使用粗略的语言。
但是我得到一个错误: input:38: 尝试对表值(本地 'v1')执行算术运算
我有同样的问题测试:the lua demo interpreter 我正在尝试的代码:
Vector2 = {x = 0, y = 0}
Vector2.prototype = {x = 0, y = 0}
Vector2.mt = {}
Vector2.new = function()
local vec = {}
setmetatable(vec, Vector2, mt)
for k, v in pairs(Vector2) do
vec[k] = v
end
return vec
end
Vector2.mt.__add = function(v1, v2)
local vec = Vector2.new()
vec.x = v1.x + v2.x
vec.y = v1.y + v2.y
return vec
end
function draw()
local v1 = Vector2.new()
local v2 = Vector2.new()
v1.x = 10
v1.y = 34
v2.x = 20
v2.y = 22
v1 = v1 + v2
print(v1.x)
end
draw()
任何想法。 谢谢。
【问题讨论】:
-
这不是OOP,而是基于原型的编程
-
感谢您解决这个问题。
-
附注:做基本的 oop 练习以了解元表是如何工作和使用的。您将学习语法并轻松发现此类错误
-
您可以使用 TypeScriptLUA,它将 typescript 代码编译成 LUA 字节码。因此,您可以使用 TypeScript 使用 OOP 编写您的类,然后在 LUA VM 中运行它。仓库在 github github.com/ASDAlexander77/TypeScriptLUA