Недавно я пытался изучить lua, и сегодня я наткнулся на то, чего не понял с функциями, приведенный ниже код не работал.
function iter()
local i=0
return function() print(i); i=i+1; end
end
iter()
iter()
Мне пришлось назначить переменную моей функции iter (), а затем вызвать переменную, прежде чем она запустится:
function iter()
local i=0
return function() print(i); i=i+1; end
end
it=iter()
it()
it()
кто-нибудь может прояснить, почему это так?
о, спасибо, я посмотрю на это. также это мой первый раз здесь, поэтому в следующий раз я постараюсь быть более конкретным :)

Прежде всего, функции - это просто значения. Ваша внешняя функция назначена переменной iter. Эта функция возвращает анонимную функцию. («Анонимный» просто означает, что вы не дали функции имя перед ее возвратом.)
Во-вторых, список аргументов в круглых скобках - это, по сути, оператор, вызывающий функцию (если только он не указан в объявлении функции). Когда вы используете этот оператор, функция запускается, и выражение дает возвращаемое значение.
В операторе iter() вы вызываете функцию и игнорируете ее возвращаемое значение, поэтому вы никогда не увидите, как выполняется внутренняя функция.
В операторе it = iter() вы получаете именованную функцию с именем it. Каждый раз, когда вы его вызываете, он увеличивает переменную i изнутри вызова iter, который ее создал.
В качестве примечания можно сказать, что iter()() немедленно вызывает возвращаемую функцию. На самом деле это не будет полезно в вашем случае, потому что каждый вызов iter возвращает новое закрытие с i, начиная с нуля.
большое спасибо! ответил на мой вопрос, и я узнал больше о функциях :)
Добро пожаловать в SO! Ваш код действительно работал (также, на будущее, пожалуйста, не забывайте всегда уточнять, что означает «не работает»). Он просто возвращает функцию, которая выполняет приращение. Вам может быть полезно взглянуть на lua.org/pil/6.1.html