【问题标题】:A table element becomes nil, after it is set to an integer表元素在设置为整数后变为 nil
【发布时间】:2019-07-17 18:05:45
【问题描述】:

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

错误:systems.lua:11: 'rectangle' 的参数 #2 错误(预期数字,得到 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

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

【问题讨论】:

    标签: lua love2d


    【解决方案1】:

    x.key = value
    

    键是字符串值"key"

    如果您希望键是变量key 的值,请这样做

    x[key] = value
    

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • 其实除了nil或NaN之外,你可以使用任何值作为key:boolean、number、string、function、table、userdata。
      • @cyclaminist 我所说的“你不能使用数字”的意思是你不能做 print(table.2),同样的布尔值,你不能做 print(table.2)。真的)。您必须在引号和括号之间使用它们,但它们不再是数字或布尔值,而是字符串。
      • 好的,我明白了。措辞混乱。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-03-22
      • 2012-06-10
      • 2016-05-19
      • 1970-01-01
      • 2019-03-07
      • 1970-01-01
      相关资源
      最近更新 更多