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

我正在寻求帮助,因为我无法理解这是否可能,更不用说我是否做错了。

my = {
    Question = AskQuestion()
}

function AskQuestion()
    return "你想知道什么?"
end

我的意图是执行print(my.Question) 并让它返回"你想知道什么?",但到目前为止我只遇到了头疼和错误,尝试让它工作。

更进一步地,如果解决了这个问题,我可以推断,与其自己想办法,还不如另外询问一下。那么传递值给函数怎么办?

my = {
    Answer = MyAnswer(vAnswer)
}

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

所以我想要执行print(my.Answer(42)),并让它返回"Life.."。

点赞
用户754147
用户754147

将下面翻译成中文并且保留原本的 markdown 格式:

只需反转声明:

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 表格,但是您应该明白。

2013-12-15 19:17:03
用户869951
用户869951

Lua 中的函数是一等公民,因此您可以将变量或表字段设置为函数:

function f() end -- 什么也不做
a = f

然后 a 引用了 f,您可以像操作 f 一样操作 a,例如调用它:

a() -- 调用 f()

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

function g(x) end
a = g -- a 现在是函数 g
a(1) -- 调用 g(1)

上述示例中的所有内容也可以用于表字段:

tt = {
    f = function() print('hi') end,
    g = function(x) print(x) end
}
tt.f() -- 调用 tt.f 函数
a = tt.f
a() -- 调用 tt.f
tt.h = a
tt.h() -- 调用 tt.f
tt.f = print -- 现在 tt.f 是打印函数
tt.f('bye') -- 打印 'bye'
2013-12-15 22:38:52