在将表元素设置为整数后,它将变为nil

问题描述 投票:1回答:2

我正在尝试创建一个基本实体组件系统,我在我的lua脚本上遇到了这个错误(使用Love2D)。我不知道问题出在哪里:

错误:systems.lua:11:错误的参数#2到'矩形'(编号预期,得到零)

main.lua

local system = require "systems"

function love.load()
    system.newPlayer()
end

function love.draw()
    system.drawPlayer()
end

systems.lua

local S = {}

local entities = require "entities"
local components = require "components"

function S.newPlayer()
    entities.player()
end

function S.drawPlayer()
    love.graphics.rectangle("fill",components.getX(1),components.getY(1), 10, 10)
end

return S

entities.lua

local components = require "components"

local E = {}

function E.player()
    components.setX(1,20)
    components.setY(1,20)
end

return E

components.lua

local C = {}

local x = {}
function C.setX(key, value)
    x.key = value
end
function C.getX(index)
    return x.index
end

local y = {}
function C.setY(key, value)
    y.key = value
end
function C.getY(index)
    return y.index
end

return C

我在调用components.setX(1,20)时将错误跟踪到entities.lua,因为在此之后,打印键的值为nil,尽管函数将其设置为20。

lua love2d
2个回答
4
投票

x.key = value

关键是字符串值"key"

如果您希望键是变量key的值,请执行

x[key] = value

0
投票

您不能使用数字作为表的键。你可以做两件事(选择一件):

  • 在set和get函数中,将键放在括号内:
function C.getX(index)
  return x[index]
end

function C.setX(key, value)
  x[key] = value
end

-- same for y
  • 或者在使用函数时指定引号之间的键
components.getX("1")
components.setX("1",20)
© www.soinside.com 2019 - 2024. All rights reserved.