我有这段代码:
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(),我该怎么做?
答案 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
并将其值作为函数调用(它是一个)。
当该函数执行时,将评估三个函数定义并将其分配给变量awesome
,notawesome
和notevenawesome
。它没有任何回报。
因此,当调用test
(nil
)的结果被字符串" 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.