为什么我的Vector2:new(ax, ay)函数会得到一个表而不是num值?

我是一名新手程序员,正在学习LÖVE2D和LUA。我根据教程制作了一个基于Vec2的模块,但是,当我使用它时(例如 vec2 =Vector2:new(128,128)),Vector2.x和Vector2.y得到表值,我无法将它们视为nums应用。有没有一种方法可以限制Vector2:new()的参数类型,或者我做错了什么?如果我做错了一些不好的实践,请纠正它。谢谢!

文件vector2.lua

return {
    new = function(ax, ay)
        local Vector2 = {
            x = ax or 0,
            y = ay or 0
        }

        function Vector2:move(a, b, dt)
            self.x = self.x + a * dt
            self.y = self.y + b * dt
        end

        --查看字段获取的哪些值
        print(Vector2.x)
        print(Vector2.y)

        return Vector2
    end
}

print(Vector2.x)返回的是类似于:

table: 0x0971d7d0
点赞
用户2858170
用户2858170

从文档中,使用 Vector2:

使用简单的命令创建 Vector2:

local point = Vector2.new(x, y)

您不能使用Vector2(x,y)Vector:new(x,y),因为没有相应的定义。

函数调用Vector2:new(x,y)Vector2(Vector2, x,y)的语法糖,为了运行,需要定义如下:

function Vector2:new(x,y)
  -- stuff
end

这是如下代码的语法糖:

function Vector2.new(self, x, y)
  -- stuff
end

否则,当您调用Vector2:new(x,y)时,表Vector2将最终出现在x中。

有关如何定义和调用函数的详细信息,请参阅 Lua 参考手册。

2019-08-07 07:34:08