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

Lua - limit function parameters to a certain type

我有一个名为 particle.new 的函数,其中一个参数名为 "colour"。我需要它始终是 table,但它不是。这给了我一个错误,因为我将它与一个名为 love.graphics.setColor() 的函数一起使用,我需要给它一个 table。我正在使用我的颜色变量,这给了我一个错误,因为它期待 table 并且它认为颜色不是 table。无论如何,这是我的代码。

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游戏引擎。

您的问题不在于 self.colour 不是 table,而是这一行

prevColor = love.graphics.getColor()

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

prevColor = {love.graphics.getColor()}

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

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

但是请注意,assert 会抛出一个错误,该错误会弹出蓝色的 love2d 屏幕并停止您的程序 运行。