Функция Lua должна быть назначена переменной - PullRequest
0 голосов
/ 29 мая 2018

Я недавно пытался выучить некоторый 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()

Может кто-нибудь уточнить, почему это так?

1 Ответ

0 голосов
/ 30 мая 2018

Прежде всего, функции - это просто значения.Ваша внешняя функция назначена переменной iter.Эта функция возвращает анонимную функцию.(«Аноним» просто означает, что вы не дали функции имя перед ее возвратом.)

Во-вторых, список аргументов в скобках - это, по сути, оператор, вызывающий функцию (если только это не указано в объявлении функции).Когда вы используете этот оператор, функция запускается, и выражение приводит к возвращаемому значению.

В операторе iter() вы вызываете функцию и игнорируете ее возвращаемое значение, поэтому вы никогда не увидите внутреннюю функциюrun.

В операторе it = iter() вы получите именованную функцию с именем it.Каждый раз, когда вы вызываете его, он увеличивает переменную i изнутри вызова iter, который ее создал.

В качестве примечания было бы правильно сказать iter()(), чтобы немедленно вызвать возвращенную функцию,Это на самом деле не было бы полезно в вашем случае, потому что каждый вызов iter возвращает новое закрытие с i, начинающимся с нуля.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...