繁体   English   中英

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

[英]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。

对此的两个可能的修复:

假设cardPileAttribute字段已经引用了您想要的功能,则可以像这样调用它:

cardPile[#cardPile].Attribute()

另一种方法是更改​​设置card_objAttribute字段的方式-使它引用字符串而不是函数:

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM