Chcę móc wywołać anonimową lambdę z wewnątrz używając Ruby. Rozważmy następujący blok rekurencyjny (zwraca silnię). Wiem, że można przypisać ją do zmiennej, a zmienna jest w zakresie lambda:Czy mogę odwoływać się do lambda z wewnątrz używając Ruby?
fac = lambda { |n| n == 1 ? 1 : n * fac.call(n - 1) }
fac.call(5)
Ale chcę, aby być w stanie wykonać następujące czynności (bez rozumu praktycznego, jak dotąd, I” m tylko zainteresowani badaniem języka niektóre więcej):
(lambda { |n| n == 1 ? 1 : n * self.call(n - 1) }).call(5)
wiem że nie będzie działać, ponieważ self
jest przedmiotem main
. Czy robię to źle? Czy próbuję zrobić coś, co nie jest możliwe - a jeśli nie, czy to z powodu pewnych teoretycznych ograniczeń, czy też nie jest po prostu zaimplementowane w Ruby?
Czy znasz Y Combinator? To może nie być najlepsze praktyczne rozwiązanie, ale z teoretycznego punktu widzenia jest bardzo interesujące. Jeśli nie, spójrz na [ten artykuł] (http://nex-3.com/posts/43-fun-with-the-y-combinator-in-ruby). Bądź ostrożny, może wydmuchać ci mózg. –