Lua面向对象编程初探

我试图让这个视频中的代码正常工作:Lua教程9:面向对象和元表,时间轴在视频的第11分钟左右

我对Lua很新,但我有编程经验,所以在学习语言的基础知识后,我想学习一些面向对象的方法。 在我的代码中,由于我现在需要使用2D,因此将vector3替换为Vector2。 Lua强大的表格是我需要更加流畅地理解语言的东西。

但是我遇到了一个错误: input:38: attempt to perform arithmetic on a table value (local 'v1')

我在测试中也遇到了相同的问题:lua演示解释器 我尝试的代码:

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()

有什么想法吗? 感谢。

点赞
用户5675002
用户5675002

你复制视频文字时犯了一个打字错误。

setmetatable(vec,Vector2,mt) 这一行应该改为 setmetatable(vec, Vector2.mt)

2018-09-22 12:11:33