我第一次涉足lua,这是行不通的。它说我试图调用全局exiter(零值)。我只是在做一个简单的程序来尝试让函数起作用。
print("hello world")
io.read()
y = 0
while y < 10 do
local x = ""
print("hello world")
x = io.read()
if x == "y" then
y = exiter(1)
print(y)
end
end
function exiter(param)
local q = 0
print ("hello again")
q = param * 10
return q;
end
答案 0 :(得分:5)
Lua程序从上到下,逐个语句执行。因此,当您输入while
循环时,函数exiter
尚未存在。在进入循环之前定义它:
function exiter(param)
local q = 0
print ("hello again")
q = param * 10
return q;
end
while y < 10 do
local x = ""
print("hello world")
x = io.read()
if x == "y" then
y = exiter(1)
print(y)
end
end
答案 1 :(得分:3)
运行代码时会发生函数定义。您尝试在while循环中调用 之后才创建exiter
函数。颠倒循环和函数定义的顺序。
答案 2 :(得分:3)
function exiter(param)
-- ...
end
是用于创建闭包并将其分配给exite
的简单语法糖,这是
__ENV
的元素:exiter = function(param)
-- ...
end
在执行赋值之前,该变量的前值为nil
(如果尚未赋值)。
类似于local function
:
local function exiter(param)
-- ...
end
相当于第一个定义一个局部变量,而然后与没有local
相同:
local exiter
exiter = function(param)
-- ...
end
这意味着在该函数语句之前对exiter
的任何使用都不会引用新的本地语句。在分配之前定义本地是必要的,以便允许递归调用,这不是等效的,不起作用:
local exiter = function(param)
-- ... cannot recursively call exiter here
end