Lua - 可以从表值调用函数并返回其值

时间:2013-12-15 19:07:58

标签: lua function-declaration

我正在寻求有关此事的帮助,因为如果我做错了,我就无法理解是否可能更不用说了。

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))然后返回“Life ..”

2 个答案:

答案 0 :(得分:3)

请忽略您的声明:

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

my = {
     Question = AskQuestion()
}

由于Lua被解释,你必须在使用之前定义所有内容。

设置变量时,您不需要传递(vAnswer),因为它不是一个定义,它只是一个现有函数用法,因此更改为:

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

my = {
    Answer = MyAnswer
}

我在这里假设您正在使用不同的my表,但是您应该了解它。

答案 1 :(得分:0)

函数是Lua中的第一类实体,因此您可以将变量或表字段设置为函数:

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

然后a指的是f,你可以用f做f /,如调用它:

a() -- calls f()

然后你可以将a设置为另一个函数,并调用它:

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'