[英]Error when attempting to call function in different lua file (function is a nil value)
[英]Nil error when trying to call a function in Lua
我遇到了一个奇怪的错误,我无法终生破解。
我正在编写纸牌游戏,并且有两个长度不同的桌子。 一个将条目链接到功能,另一个则保存已玩的卡。 第一个表用于卡组中某些卡牌具有的属性。
ATTRIBUTES = {
Reset = RuleBook.Do_Reset,
Go_Lower= RuleBook.Do_Go_Lower,
Mirror = RuleBook.Do_Mirror}
这些函数的调用方式如下:
ATTRIBUTES[cardPile[#cardPile].Attribute]()
我已经打印出卡片对象和ATTRIBUTES表的内容,并且两者都完好无损。 具有属性的卡在功能的“属性”下具有一个表条目,这些卡链接到Do _...函数。 但是上面的代码行似乎不起作用。 如果有人有想法或建议,将不胜感激。
通过Lua,您基本上可以将任何类型的lua值用作表中的键。 上面代码的问题是,您的ATTRIBUTE
表使用字符串作为键,但是cardPile[#cardPile].Attribute
是一个函数,而不是字符串。
当您在此处执行查找时:
ATTRIBUTES[cardPile[#cardPile].Attribute]()
您说的是在具有键cardPile[#cardPile].Attribute
它是一个函数)的ATTRIBUTES
中查找相应的值。 定义的ATTRIBUTES
表仅包含字符串作为键-它不具有任何键功能,因此返回nil。
对此的两个可能的修复:
假设cardPile
的Attribute
字段已经引用了您想要的功能,则可以像这样调用它:
cardPile[#cardPile].Attribute()
另一种方法是更改设置card_obj
的Attribute
字段的方式-使它引用字符串而不是函数:
function Card.Create(Suit, Number, Name)
local card_obj = {}
-- ...
if( card_obj.number == 1 ) then
card_obj.Attribute = "Reset"
elseif( card_obj.number == 6 ) then
card_obj.Attribute = "Go_Lower"
-- ... etc.
else
card_obj.Attribute = nil;
end
end
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.