ruby - 未声明的可枚举对象是否可以在 block 内调用自身?

标签 ruby block self

我今天最近问了一个问题 ( Equality test on three or more objects ),我试图确定一种优雅的方式来对一组 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

以某种方式,我能够引用 block 调用的初始对象,而不必首先在上一行中声明该对象。在伪代码中,我想做的是这样的:

[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}}

关于ruby - 未声明的可枚举对象是否可以在 block 内调用自身?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35296308/

相关文章:

python - 区分脚本何时运行 'directly' 或 Python 可执行文件

ruby-on-rails - 错误 : Syntax - Html to RoR

url - 请建议 Fiddler Core 3rd 方库的替代方案

ios - Objective C block 会保留 UI 自动释放问题吗?

ruby - 有人可以解释 Ruby 在 block 中使用管道字符吗?

python - 谁能解释一下 "out = self(images)"在下面的代码中做了什么

ruby - 我可以在将不符合我的条件的对象输入数组时拒绝它们吗?

Ruby 将所有空格减少为单个空格

ruby - 在 Ruby 中设置时区偏移

python - 如何使用装饰器类来装饰实例方法?