Я хочу иметь возможность вызывать анонимную лямбду изнутри с помощью Ruby. Рассмотрим следующий рекурсивный блок (возвращает факториал). Я знаю, что могу назначить его переменной, и эта переменная входит в область лямбда:
fac = lambda { |n| n == 1 ? 1 : n * fac.call(n - 1) }
fac.call(5)
Но, я хочу, чтобы иметь возможность сделать следующее (по какой-либо практической причине пока еще, я просто заинтересован в изучении языка еще):
(lambda { |n| n == 1 ? 1 : n * self.call(n - 1) }).call(5)
Я знаю, что это не сработает, потому что self
- это объект main
. Я делаю это неправильно? Я пытаюсь сделать что-то невозможное - а если нет, то это из-за какого-то теоретического ограничения или просто не реализовано в Ruby?