我的lua有什么问题?

时间:2014-08-08 15:49:18

标签: lua

我第一次涉足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

3 个答案:

答案 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