Иду по книжке иерусалимскиса "Программирование на Луа" Поясните пожалуйста этот пример
Код
function derivative (f, delta)
delta = delta or 1e-4
return function (x) return (f(x + delta) - f(x))/delta end
end
c = derivative(math.sin)
print(math.cos(5.2), c(5.2))
Let_it_go написал: Откуда function (x) return (f(x + delta) - f(x))/delta end берёт свой аргумент x?
У Вас функция derivative возвращает функцию (в вашем примере "c" это функция) и X это параметр этой функции. В Вашем примере X задается при вызове c(5.2)
function newCounter ()
local i = 0
return function () i = i + 1 return i end
end
c1 = newCounter()
print(c1()) --> 1
print(c1()) --> 2
Почему второй принт выводит 2, а не 1? Ведь во второй строчке идёт обнуление переменной i. Она не может сохранить старое значение 1 и превращается в 0. Откуда 2?
Let_it_go написал: Почему второй принт выводит 2, а не 1? Ведь во второй строчке идёт обнуление переменной i. Она не может сохранить старое значение 1 и превращается в 0. Откуда 2?
Получается, что 1 будут выводить только такие принты, в которых будет создаваться новый экземпляр newCounter вместе с новым нулевым i:
SDL написал: Потому что функция c1, которая создана вызовом newCounter(), - не простая функция, а т.н. "замыкание". Она не просто может сохранить старое значение 1, она это делает, т.к. переменная i является для этой функции внешней, и именно для этого подобные конструкции и предусмотрены. См., например: https://ru.wikipedia.org/wiki/%D0%97%D0%B0%D0%BC%D1%8B%D0%BA%D0%B0%D0%BD%D0%B8%D0 %B5_(%D0%BF%D1%80%D...