2013-12-15 29 views
2

我正在尋求關於此問題的幫助,因爲我無法完全掌握,如果可能的話,更別說如果我只是做錯了。Lua - 函數是否可以從表值中調用並返回值

my = { 
    Question = AskQuestion() 
} 

function AskQuestion() 
    return "What do you want to know?" 
end 

我的本意是做,打印(my.Question),並使其返回「你想知道什麼?」,到目前爲止,我剛剛跑進頭痛和錯誤試圖得到這個工作。

更進一步說,如果這個問題得到解決,我可以推測而不是自己弄清楚,我還可以問一下。怎麼樣傳遞一個值給函數。

my = { 
    Answer = MyAnswer(vAnswer) 
} 

function MyAnswer(vAnswer) 
    if vAnswer == "42" then return "Life.." end 
end 

所以在這裏我願意這樣做,打印(my.Answer(42)),並返回 「生命..」

回答

3

只需翻轉你的宣言:

function AskQuestion() 
    return "What do you want to know?" 
end 

my = { 
    Question = AskQuestion() 
} 

由於Lua中被解釋爲你必須在你可以使用之前定義一切。

當設置你不需要傳遞(vAnswer),因爲它不是一個defition一個變量,它僅僅是一個現有功能的使用,所以改爲:

function MyAnswer(vAnswer) 
    if vAnswer == "42" then return "Life.." end 
end 

my = { 
    Answer = MyAnswer 
} 

我假設在這裏你正在使用不同的my表,但你應該得到這張照片。

+0

謝謝,簡直不敢相信它是那麼簡單。現在試圖解決第二個問題,將值傳遞給表中的該函數。繼續得到一個布爾錯誤>< – CrazyCactuaR

+0

@CrazyCactuaR我很抱歉,沒有看到第二部分,我只是編輯了答案好嗎? – prmottajr

+0

再次,謝謝!這一次真的把我拉上了牆。不得不修改MyAnswer(vAnswer)到MyAnswer解決了它。希望我不會設法絆倒其他任何東西讓我們都感到痛心:) – CrazyCactuaR

0

函數是在Lua第一類的實體,以便可以設置一個變量或表字段是一個函數:你可以

function f() end -- do nothing 
a = f 

然後,是指F,可以做到/與以f,如調用它:

a() -- calls f() 

那麼你可以設置一個是另一個的功能,並將其命名爲:

function g(x) end 
a = g -- a is now function g 
a(1) -- calls g(1) 

上述示例中的所有內容都可以通過表格字段來完成:

tt = { 
    f = function() print('hi') end, 
    g = function(x) print(x) end 
} 
tt.f() -- calls tt.f function 
a = tt.f 
a() -- calls tt.f 
tt.h = a 
tt.h() -- calls tt.f 
tt.f = print -- now tt.f is print function 
tt.f('bye') -- prints 'bye' 
相關問題