Tôi muốn có thể gọi một lambda ẩn danh từ bên trong chính nó bằng Ruby. Hãy xem xét khối đệ quy sau đây (trả về giai thừa). Tôi biết tôi có thể gán nó vào một biến, và biến đó là trong phạm vi của lambda:Tôi có thể tham khảo một lambda từ bên trong chính nó bằng cách sử dụng Ruby không?
fac = lambda { |n| n == 1 ? 1 : n * fac.call(n - 1) }
fac.call(5)
Nhưng, tôi muốn để có thể làm như sau (không có lý do thực tế như được nêu ra, tôi m chỉ quan tâm đến việc khám phá ngôn ngữ một số chi tiết):
(lambda { |n| n == 1 ? 1 : n * self.call(n - 1) }).call(5)
tôi biết rằng sẽ không làm việc, bởi vì self
là đối tượng main
. Tôi có làm sai không? Tôi đang cố gắng làm điều gì đó không thể - và nếu không, điều này là do một số hạn chế về mặt lý thuyết hay đơn giản là nó không được triển khai trong Ruby?
Bạn có quen thuộc với Y Combinator? Nó có thể không phải là giải pháp thực tế tốt nhất, nhưng từ quan điểm lý thuyết thì nó rất thú vị. Nếu bạn không, hãy xem [bài viết này] (http://nex-3.com/posts/43-fun-with-the-y-combinator-in-ruby). Hãy cẩn thận, nó có thể thổi não của bạn ra ngoài. –