如何在 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
并将其值作为函数调用(它是一个)。
当该函数执行时,三个函数定义被求值并分别分配给变量 awesome
、notawesome
和 notevenawesome
。它没有 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.
我有这个代码:
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
并将其值作为函数调用(它是一个)。
当该函数执行时,三个函数定义被求值并分别分配给变量 awesome
、notawesome
和 notevenawesome
。它没有 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.