Я очень новичок в lua, и я хотел бы понять следующее поведение.
Когда я пытаюсь запустить следующую функцию рекурсии:
local func = function ( n )
if n == 1 then return 1
else return n * func( n - 1 )
end
end
print( func( 5 ) )
Программа завершится ошибкой:
lua: main.lua:16: attempt to call a nil value (global 'func')
stack traceback:
main.lua:16: in local 'func'
main.lua:38: in main chunk
[C]: in ?
что нормально, поскольку, согласно объяснению, локальная версия func< /em> переменная еще не известна, поэтому она пытается вызвать глобальную. Но когда я удаляю ключевое слово local, следующий код работает правильно?
func = function ( n )
if n == 1 then return 1
else return n * func( n - 1 )
end
end
print( func( 5 ) )
В результате программа выводит 120, но глобальная функция func никогда раньше не инициализировалась и не использовалась. Как это возможно, чтобы это тоже не выдавало ошибку? Разве второй пример не ссылается на глобальную func, как в первом?