Lua在函数内调用函数?

时间:2018-04-01 17:47:22

标签: function lua 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()

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

  

15:尝试索引零值

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

3 个答案:

答案 0 :(得分:3)

你的函数没有返回任何东西(因此返回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()

答案 1 :(得分:3)

@Axnyff explains你可能想做什么。我会解释你的所作所为。

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

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

当该函数执行时,将评估三个函数定义并将其分配给变量awesomenotawesomenotevenawesome。它没有任何回报。

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

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

答案 2 :(得分:0)

如果要实现此目的而不是使用主要功能,则可以使用一个对象:

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.
相关问题