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

How to call a function within a function in Lua?

我有这个代码:

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()

当我运行这个时,控制台打印

15: attempt to index a nil value

我想做的是在函数 test() 中调用函数 notawesome(),我该怎么做那个?

您的函数未返回任何内容(因此返回 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()

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

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

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

当该函数执行时,三个函数定义被求值并分别分配给变量 awesomenotawesomenotevenawesome。它没有 return 任何东西。

因此,当调用 test (nil) 的结果被字符串 "awesome" 索引时,就会出现错误。

如果你想调用变量awesome引用的函数值,只需要awesome().

如果你想实现它而不是使用 main 函数,你可以使用一个对象:

test = {
    awesome = (function()
        return 'im awesome!'
    end),
    notawesome = (function()
        return 'im not awesome.'
    end),
    notevenawesome = (function()
        return 'im not even awesome...'
    end)
}

要调用您的函数,请使用:

print(test.notawesome())    --> im not awesome.