如何在Lua中的函数内调用函数?

cra*_*er1 3 lua function nested-function

我有这个代码:

function test()
    function awesome()
        print("im awesome!")
    end

    function notawesome()
        print("im not awesome.")
    end

    function notevenawesome()
        print("im not even awesome...")
    end
end

test().notawesome()
Run Code Online (Sandbox Code Playgroud)

当我运行它时,控制台打印

15:尝试索引一个 nil 值

我正在试图做的是调用函数notawesome()函数内试验(+) ,我该怎么做?

Axn*_*yff 5

您的函数没有返回任何内容(因此返回 nil)。这样的事情应该工作:

function test()
    function awesome()
        print("im awesome!")
    end

    function notawesome()
        print("im not awesome.")
    end

    function notevenawesome()
        print("im not even awesome...")
    end
    result = {}
    result["notawesome"] = notawesome
    result["awesome"] = awesome
    result["notevenawesome"] = notevenawesome
    return result
end
test().notawesome()
Run Code Online (Sandbox Code Playgroud)


Tom*_*get 5

@Axnyff解释了你可能想要做什么。我会解释你做了什么。

如果您熟悉其他语言,请注意 Lua 没有函数声明;它具有函数定义,它们是在求值时产生函数值的表达式。您使用的函数定义语句只是隐式包含赋值的快捷方式。请参阅手册。

当您运行代码时,将对函数定义进行求值,并将生成的函数值分配给变量test。然后对变量test进行求值,并将其值作为函数调用(并且它是一)。

当该函数执行时,将评估三个函数定义并将其分别分配给变量awesomenotawesomenotevenawesome。它不返回任何内容。

test因此,当调用( )的结果nil由字符串“awesome”索引时,您会收到错误。

如果您想调用变量引用的函数值awesome,只需执行即可awesome()