未声明的可枚举对象是否可以在块中调用自身?
Is it possible for an undeclared enumerable object to be able to call itself within a block?
我今天 () 最近问了一个问题,我试图确定一种优雅的方法来 运行 对一组 3 个或更多对象进行相等性测试。其中一个解决方案原来是这样的:
array = [1,1,1,1]
array.all? {|x| x == array.first }
我想知道是否可以将其减少到只有一行,这样我就可以做一些会像这样解释的事情:
[1,1,1,1].all? {|x| x == [1,1,1,1].first }
#=> true
我可以通过某种方式引用块调用的初始对象,而无需首先在前一行中声明该对象。在伪代码中,我想做的是这样的:
[1,1,1,1].all? {|x| x == object_being_called_on_by_block.first }
#=> true
我也试过这个,但没用:
[1,1,1,1].all? { |x| x == self.first }
这在 SO 上经常被问到,并且经常被要求作为 Ruby 核心的功能。到目前为止,Ruby 核心开发人员推荐这个:
[1,1,1,1].tap{|a| break a.all?{|x| x == a.first}}
如果你不介意性能,你可以这样做:
[1,1,1,1].instance_eval{all?{|x| x == first}}
我今天 (
array = [1,1,1,1]
array.all? {|x| x == array.first }
我想知道是否可以将其减少到只有一行,这样我就可以做一些会像这样解释的事情:
[1,1,1,1].all? {|x| x == [1,1,1,1].first }
#=> true
我可以通过某种方式引用块调用的初始对象,而无需首先在前一行中声明该对象。在伪代码中,我想做的是这样的:
[1,1,1,1].all? {|x| x == object_being_called_on_by_block.first }
#=> true
我也试过这个,但没用:
[1,1,1,1].all? { |x| x == self.first }
这在 SO 上经常被问到,并且经常被要求作为 Ruby 核心的功能。到目前为止,Ruby 核心开发人员推荐这个:
[1,1,1,1].tap{|a| break a.all?{|x| x == a.first}}
如果你不介意性能,你可以这样做:
[1,1,1,1].instance_eval{all?{|x| x == first}}