【问题标题】:lua oop starting outlua oop 开始
【发布时间】: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

标签: oop lua


【解决方案1】:

您从视频中复制文本时打错了字。

setmetatable(vec, Vector2, mt) 应该是setmetatable(vec, Vector2.mt)

【讨论】:

  • 我爱你 :) 我想我在发帖之前看了 50 遍代码。谢谢
猜你喜欢
  • 2017-03-15
  • 1970-01-01
  • 2017-06-09
  • 2021-03-31
  • 1970-01-01
  • 2013-12-29
  • 2011-06-20
  • 1970-01-01
  • 2014-01-28
相关资源
最近更新 更多