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

我有这段代码:

function test()
    function awesome()
        print("我是超赞的!")
    end

    function notawesome()
        print("我不是很厉害。")
    end

    function notevenawesome()
        print("我甚至不是那么厉害……")
    end
end

test().notawesome()

当我运行这段代码时,控制台输出

15: attempt to index a nil value

我想做的是在函数 test() 内部调用函数 **notawesome()**,我该怎么做呢?

点赞
用户4949918
用户4949918

你的函数没有返回任何东西(因此返回 nil)。像下面这样应该可以解决问题:

function test()
    function awesome()
        print("我很棒!")
    end

    function notawesome()
        print("我不太好。")
    end

    function notevenawesome()
        print("我甚至不太好......")
    end
    result = {}
    result["notawesome"] = notawesome
    result["awesome"] = awesome
    result["notevenawesome"] = notevenawesome
    return result
end
test().notawesome()
2018-04-01 17:53:59
用户2226988
用户2226988

@Axnyff 解释 你可能试图做什么。我将解释你做了什么。

如果你熟悉其他语言,请注意 Lua 没有函数声明。它有函数定义,即在计算时产生函数值的表达式。函数定义语句是一个快捷方式,它隐式包括了赋值。请参阅手册。

当你运行你的代码时,一个函数定义被求值,生成的函数值被赋给变量test。然后,变量test被求值,并且它的值被作为函数调用(它确实是一个函数)。

当该函数执行时,三个函数定义被求值,并分别赋值给变量 awesomenotawesomenotevenawesome。它不返回任何东西。

因此,当用字符串 "awesome" 索引调用 test 的结果时(nil),你会得到错误。

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

2018-04-01 18:57:27
用户3618581
用户3618581

如果你想实现不使用主函数,可以使用一个对象:

test = {
    awesome = (function()
        return '我很棒!'
    end),
    notawesome = (function()
        return '我不太棒。'
    end),
    notevenawesome = (function()
        return '我甚至不太棒...'
    end)
}

调用你的函数使用下面的代码:

print(test.notawesome())    --> 我不太棒。
2020-01-03 08:21:19