Lua - 将函数参数限制为某种类型

时间:2015-10-10 22:09:06

标签: function lua game-engine lua-table love2d

我有一个名为particle.new的函数,其中一个参数叫做#34; color"。我需要这个永远是一张桌子,但它不是。这给了我一个错误,因为我使用了一个名为love.graphics.setColor()的函数,我需要给它一个表。我正在使用我的颜色变量,这给了我一个错误,因为它期待一张桌子而且它认为颜色不是一张桌子。无论如何,这是我的代码。

particle = {}
particle.__index = particle

function particle.new (x, y, colour, mass, drag)
  local self = setmetatable({}, particle)
  self.x, self.y, self.colour, self.mass, self.drag = x, y, colour, mass, drag
  return self
end

function particle:draw ()
  prevColor = love.graphics.getColor()
  love.graphics.setColor(self.colour)
  love.graphics.point(self.x, self.y)
  love.graphics.setColor(prevColor)
end

function particle:update ()

end

function love.load()
  gravity = -9.32
  particles = {}
  table.insert(particles, particle.new(50,50,{255, 0, 0, 255},1,0.2))
end

function love.draw()
  for i = 1, table.maxn(particles) do
    particles[i]:draw()
  end
end

顺便说一下,我使用的是Love2D游戏引擎。

1 个答案:

答案 0 :(得分:0)

你的问题不在于self.colour不是一张桌子,而是在这一行

prevColor = love.graphics.getColor()

当你这样做时,prevColor只获得四个返回值中的一个。 解决方案是将函数调用括在一个表中,以便保留所有4个值。 (就像@EgorSkriptunoff所说的那样)

prevColor = {love.graphics.getColor()}

至于你的问题: 使用asserttype检查变量类型

assert(type(colour)=="table", "-Error message goes here-")

请注意,断言将抛出一个错误,该错误将调出蓝色的love2d屏幕并停止运行。