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()}
关于你的问题:
使用 assert
和 type
检查变量类型
assert(type(colour)=="table", "-Error message goes here-")
但是请注意,assert 会抛出一个错误,该错误会弹出蓝色的 love2d 屏幕并停止您的程序 运行。
我有一个名为 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()}
关于你的问题:
使用 assert
和 type
检查变量类型
assert(type(colour)=="table", "-Error message goes here-")
但是请注意,assert 会抛出一个错误,该错误会弹出蓝色的 love2d 屏幕并停止您的程序 运行。