尝试在Lua中调用函数时出现Nil错误

时间:2013-03-03 23:05:59

标签: function lua lua-table

我得到一个奇怪的错误,我不能为我的生活破解。

我正在编写纸牌游戏,我有两张不同长度的桌子。一个链接到功能的条目,另一个保持播放的卡片。第一个表格用于牌组中某些牌的属性。

ATTRIBUTES = {  
        Reset   = RuleBook.Do_Reset,
        Go_Lower= RuleBook.Do_Go_Lower,
        Mirror  = RuleBook.Do_Mirror}

调用这些函数的方式如下:

ATTRIBUTES[cardPile[#cardPile].Attribute]()

我已经打印出了卡片对象和ATTRIBUTES表格的内容,两者完全一致。具有属性的卡在函数的属性下具有表条目,并且这些条目链接到Do _...函数。但上面的代码行似乎不起作用。如果有人有想法或建议,他们将不胜感激。

1 个答案:

答案 0 :(得分:0)

Lua让你基本上可以使用任何类型的lua值作为表中的键。上面代码的问题在于,ATTRIBUTE表使用字符串作为键,但cardPile[#cardPile].Attribute是函数 NOT 字符串。

在此处执行查找时:

ATTRIBUTES[cardPile[#cardPile].Attribute]()

您说在ATTRIBUTES中查找具有作为函数的键cardPile[#cardPile].Attribute的相应值。您定义的ATTRIBUTES表只包含字符串作为键 - 它没有键作为键,因此返回nil。

对此有两种可能的解决方法:

假设cardPile的{​​{1}}字段已经引用了您想要的功能,您可以这样称呼它:

Attribute

另一种方法是更改​​设置cardPile[#cardPile].Attribute() 的{​​{1}}字段的方式 - 使其引用字符串而不是函数:

card_obj