2

我遇到了一个奇怪的错误,我终生无法破解。

我正在编写纸牌游戏,我有两张不同长度的桌子。一个将条目链接到功能,另一个持有打出的牌。第一个表是牌组中某些牌的属性。

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

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

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

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

4

1 回答 1

0

Lua 基本上允许您使用任何类型的 lua 值作为表中的键。上面代码的问题是您的ATTRIBUTE表使用字符串作为键,但cardPile[#cardPile].Attribute它是一个函数而不是字符串。

当您在此处执行查找时:

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

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

对此有两个可能的修复:

假设cardPile'sAttribute字段已经引用了你想要的函数,你可以这样调用它:

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
于 2013-03-05T20:57:38.360 回答