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

我试图创建一个内部有本地函数的函数。主函数将接收来自外部来源的输出,其中的函数将必须将该输入翻译并返回结果以供以后使用。我的问题是,我当前尝试的方式是,在主函数中尝试放入第一个本地函数时,我继续得到 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)? 我可以通过嵌套函数来获得所需的响应。但是,当我尝试更详细地描述我想要接收的响应并将该函数放置在全局函数中时,我开始获得这些响应。无论何时我试图在其他函数中使用函数,这似乎是我的问题。我可以创建两个单独的全局函数并从任何一个中打印结果。但是,一旦我尝试在另一个函数内部使用一个函数,我就会把自己弄糊涂。任何可以花点时间帮助初学者更好地了解他做错了什么的人都将是伟大的!谢谢大家。

点赞
用户869951
用户869951

基于你的描述“其中的函数需要翻译输入并在将来的使用中返回结果”,我不确定嵌套函数是否满足你的需求。当你有两个全局函数时,你的代码运行正常:

function func1(args)
    ...
end

function func2(args)
    ...
end

但是当你将(例如)func1 嵌套在 func2 中时,它就不能正常运行。Lua 确实允许你定义嵌套函数,但我只能想到两个使用它的原因:

  1. 返回一个封装了任务的函数,通常带有一些包装函数的参数和/或本地变量作为封闭值。
  2. 封装一些逻辑在函数中,在包装函数中调用,而不需要其他函数调用它。

以情况 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 的变形。

2014-05-15 01:45:49