Perl用于Ruby的__SUB__类比

Perl用于Ruby的__SUB__类比,第1张

概述在Perl中,我们可以使用__SUB__来获取对当前子例程的引用. Ruby有类似的吗? 例如,让我们在Perl中编写一个匿名的factorial子例程: my $fact = sub { $_[0] > 1 ? $_[0] * __SUB__->($_[0] - 1) : 1;}; 在Ruby中,我首先创建一个命名方法,然后将其转换为lambda: def factorial(n) 在Perl中,我们可以使用__SUB__来获取对当前子例程的引用. Ruby有类似的吗?

例如,让我们在Perl中编写一个匿名的factorial子例程:

@H_419_13@my $fact = sub { $_[0] > 1 ? $_[0] * __SUB__->($_[0] - 1) : 1;};

在Ruby中,我首先创建一个命名方法,然后将其转换为lambda:

@H_419_13@def factorial(n) n > 1 ? n * factorial(n - 1) : 1endfact = method(:factorial).to_proc

我觉得这不是编写递归lambda的最佳方法.我错过了什么?

解决方法 我不认为Ruby提供任何内置的实用程序,可以帮助您在不首先命名函数的情况下执行递归;但是,你可以这样做 use the Y-combinator in Ruby:

@H_419_13@def y_combinator(&generator) proc { |x| proc { |*args| generator.call(x.call(x)).call(*args) } }.call(proc { |x| proc { |*args| generator.call(x.call(x)).call(*args) } })endfactorial = y_combinator do |callback| proc { |n| n > 1 ? n * callback.call(n - 1) : 1 }endfactorial.call(5) # => 120 总结

以上是内存溢出为你收集整理的Perl用于Ruby的__SUB__类比全部内容,希望文章能够帮你解决Perl用于Ruby的__SUB__类比所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1269997.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-08
下一篇 2022-06-08

发表评论

登录后才能评论

评论列表(0条)

保存