我正在尝试创建一个包含本地函数的函数。主函数将从外部源接收输出,并且其中的函数将需要转换该输入并返回结果以供以后使用。我的问题是我正在尝试这种方式,当我尝试在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)
?我可以在没有嵌套函数的情况下得到我想要的响应。但是当我试图详细说明我想要接收的响应,并将该函数放在全局函数中时,我开始得到这些响应。当我尝试在其他函数中使用函数时,这似乎是我的问题。我可以创建两个独立的全局函数,并从任何一个打印结果。但是,当我尝试在另一个中使用一个时,我搞砸了自己。任何能够花些时间帮助初学者更好地理解他做错了什么的人都会很棒!谢谢大家。
答案 0 :(得分:2)
根据你的陈述"其中的函数将需要翻译该输入并返回结果供以后使用",我不确定嵌套函数是否是你想要的。你说当你有两个全局函数时你的代码可以工作:
function func1(args)
...
end
function func2(args)
...
end
但是当您在func1
内嵌套(例如)func2
时,它就不再有效了。 Lua允许您定义嵌套函数,但我只能想到使用它们的两个原因:
例如案例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的变体。