Я пытаюсь создать функцию с локальными функциями внутри нее. Основная функция будет получать выходные данные из внешнего источника, а функции внутри нее должны будут преобразовывать эти входные данные и возвращать результаты для последующего использования. Моя проблема в том, что, как я сейчас пытаюсь это сделать, когда я пытаюсь поместить свою первую локальную функцию в основную функцию, я продолжаю получать 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)
? Я могу получить ответ, который хочу, без вложенной функции. Но когда я пытаюсь уточнить ответ, который я хотел бы получить, и помещаю эту функцию в глобальную функцию, я начинаю получать эти ответы. Кажется, это моя проблема каждый раз, когда я пытаюсь использовать функции внутри других функций. Я могу создать две отдельные глобальные функции и распечатать результаты любой из них. Но в ту минуту, когда я пытаюсь использовать одно в другом, я облажался. Любой, кто может потратить некоторое время, чтобы помочь новичку лучше понять, что он делает неправильно, был бы великолепен! Спасибо всем.
nameInit
? Вы только определяете это здесь, но ничего не вызываете. - person Colonel Thirty Two   schedule 15.05.2014stats(input)
наstats(ht, wt, name, age, gender, relate)
вместо использования string.match, чтобы сопоставить их все? - person Josh   schedule 15.05.2014relship
нигде в этом фрагменте кода, поэтому он не может генерировать эту ошибку. Вам необходимо предоставить нам более точный и полный список кодов, если вы хотите получить помощь. (В качестве общего совета вы также хотите использовать локальные переменные, включая функции, вместо того, чтобы везде использовать глобальные.) - person Etan Reisner   schedule 15.05.2014function
являются вложенными, поскольку каждый фрагмент исходного кода компилируется как тело функции. Следовательно, если фрагмент определяет функцию, эта функция является вложенной. - person Tom Blodget   schedule 16.05.2014