Lua:如何正确构建嵌套函数

时间:2014-05-14 21:22:45

标签: function lua nested-function

我正在尝试创建一个包含本地函数的函数。主函数将从外部源接收输出,并且其中的函数将需要转换该输入并返回结果以供以后使用。我的问题是我正在尝试这种方式,当我尝试在main函数中放入我的第一个本地函数时,我继续得到nil。这是一个例子:

function stats(input)
    height, weight, name, age, gender, relate = string.match(input, "(%d*)ft,(%d*)lbs,(%w*),(%d*),(%u*),(%u)")
    if name then
        function nameInit(relate)
            relateTable = {["F"] = "Friend", ["R"] = "Relative"}
            for k,v in pairs (relateTable) do
                if relate == k then
                    relship = v
                    return relship
                end
            end
        end
    end
    person = name.." is "..age.." years old, weighs "..weight.." and blah blah blah....
    return person
end
print (stats("5.8ft, 160lbs, Mike Scott, 19, M, F"))

显然,这个主题并不实用,但我想要做的就是在最终回应方面采用相同的方针。我目前正在lua: filename: attempt to concatenate global 'relship' (a nil value)?我可以在没有嵌套函数的情况下得到我想要的响应。但是当我试图详细说明我想要接收的响应,并将该函数放在全局函数中时,我开始得到这些响应。当我尝试在其他函数中使用函数时,这似乎是我的问题。我可以创建两个独立的全局函数,并从任何一个打印结果。但是,当我尝试在另一个中使用一个时,我搞砸了自己。任何能够花些时间帮助初学者更好地理解他做错了什么的人都会很棒!谢谢大家。

1 个答案:

答案 0 :(得分:2)

根据你的陈述"其中的函数将需要翻译该输入并返回结果供以后使用",我不确定嵌套函数是否是你想要的。你说当你有两个全局函数时你的代码可以工作:

function func1(args)
    ...
end

function func2(args)
    ...
end

但是当您在func1内嵌套(例如)func2时,它就不再有效了。 Lua允许您定义嵌套函数,但我只能想到使用它们的两个原因:

  1. 返回一个封装任务的函数,通常将一些包装函数的args和/或locals作为upvalues。
  2. 将一些逻辑封装在要从包装函数中调用的函数中,而不需要任何其他函数来调用它。
  3. 例如案例1:

    function func2(a, b, c)
       function func1()
           do something with a, b, c eventhough they are not args of func1
           return result
       end
       return func1
    end
    
    someFunc = func2(1,2,3)
    ....
    result = someFunc() -- calls func1 created inside func2, using 1,2,3 
    

    例如案例2:

    function func2(a, b, c)
       function func1()
           do something with a, b, c eventhough they are not args of func1
           return result
       end
       result = func1()
       ...
    end
    
    func2(1,2,3)
    

    您还可以将嵌套函数添加到作为参数传递的表对象(类)中,但我将其视为案例1的变体。