table 元素在设置为整数后变为 nil

A table element becomes nil, after it is set to an integer

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

错误:systems.lua:11:'rectangle' 的错误参数 #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。

您不能将数字用作表格的键。您可以做两件事(选择一项):

  • 在 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)

x.key = value

键是字符串值"key"

如果你想让键成为变量key的值,做

x[key] = value