2013-03-03 43 views
2

我收到了一個奇怪的錯誤,我無法對我的生活進行破解。嘗試調用Lua中的函數時沒有錯誤

我正在編寫一個紙牌遊戲,我有兩個不同長度的表格。一個將條目鏈接到功能,另一個保存已玩過的卡片。第一個表格是用於卡組中某些牌的屬性。

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

這些功能被調用的方法是如下:

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

我已經打印出的兩個卡對象和屬性表和兩者的內容完全在生產節拍。具有屬性的卡片在屬性的某個功能下有一個表格條目,並且鏈接到Do _...功能。但上面的代碼行似乎不起作用。如果任何人有想法或建議,他們將不勝感激。

+0

不起作用h流?產生了什麼錯誤?通常如何調用你的函數?從'cardPile'表中給出一個例子。 – hjpotter92 2013-03-03 23:21:22

+0

嘗試打電話給'?' (無值)是我收到的錯誤消息。至於我如何稱呼我的職能;通常據我所知。這是代碼中唯一一個以這種方式調用函數的地方。 cardPile中的一個條目應該是: number 1, Attribute function, picture 2D.png, isSelected = false。 這就是我從打印出來的表格 – user2087398 2013-03-03 23:35:35

+0

我試着[往復](http://codepad.org/gR0yXQTt)你的例子,它似乎工作正常。請提供更多關於如何將數據存儲到'cardPile'表的代碼。 http://codepad.org/gR0yXQTt – hjpotter92 2013-03-03 23:55:56

回答

0

Lua讓你基本上可以使用任何類型的lua值作爲表中的關鍵。上述代碼的問題在於您的ATTRIBUTE表使用字符串作爲密鑰,但cardPile[#cardPile].Attribute是函數而不是的字符串。

當您執行此查詢:

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

你是說在ATTRIBUTES查找具有關鍵cardPile[#cardPile].Attribute這是一個功能對應的對應值。您定義的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 
+0

非常感謝您的回答。我會盡快對其進行測試(不幸的是,同時出現了一個棘手的語法錯誤,我需要修復)。只是爲了澄清一件事;當你說「cardPile [#cardPile] .Attribute()」我假設你的意思是代替「ATTRIBUTES [cardPile [#cardPile] .Attribute]()」代碼行? – user2087398 2013-03-06 01:56:01

+0

是的,這是正確的。記住你可以接受答案,如果它解決了你的問題。 – greatwolf 2013-03-06 04:27:46