![](/img/trans.png)
[英]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.