表元素被设置为整数后变为nil

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

错误:systems.lua:11:bad argument#2 to 'rectangle'(需要数字,得到nil)

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

我追踪错误到entities.lua,在调用components.setX(1,20)时,因为在这之后,打印key的值为nil,即使函数将其设置为20。

点赞
用户8145373
用户8145373

你不能把数字作为表的键。你可以选择以下两个方法之一:

  • 在 set 和 get 函数中使用方括号将键包裹起来:
function C.getX(index)
  return x[index]
end

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

-- 对 y 做同样的操作
  • 或在使用函数时用引号指定键
components.getX("1")
components.setX("1",20)
2019-02-24 01:25:17
用户2226988
用户2226988

x.key = value

中,键是字符串值“key”。

如果您想要的键是变量key的值,请执行以下操作

x[key] = value
2019-02-24 04:06:04