ruby - 如何将 'each' 方法添加到 Ruby 对象(或者我应该扩展数组)?

标签 ruby

我有一个对象 Results,它包含一个 result 对象数组以及一些关于数组中对象的缓存统计信息。我希望 Results 对象能够表现得像一个数组。我的第一个切入点是添加这样的方法

 def <<(val)
    @result_array << val
 end

这感觉非常像 C,我知道 Ruby 有更好的方法。

我也希望能够做到这一点

 Results.each do |result|   
    result.do_stuff   
 end

但我不确定 each 方法到底在做什么。

目前我只是通过一个方法返回底层数组并调用它的每个,这似乎不是最优雅的解决方案。

如有任何帮助,我们将不胜感激。

最佳答案

对于实现类数组方法的一般情况,是的,您必须自己实现它们。 Vava 的回答就是一个例子。但是,在您给出的情况下,您真正​​想做的是委托(delegate)处理 each 的任务。 (可能还有一些其他方法)到包含的数组,这可以自动化。

require 'forwardable'

class Results
  include Enumerable
  extend Forwardable
  def_delegators :@result_array, :each, :<<
end

此类将获得 Array 的所有 Enumerable 行为以及 Array <<运算符,它将全部通过内部数组。


请注意,当您将代码从数组继承切换到此技巧时,您的 <<方法开始返回的不是对象本身,就像真正的 Array 的 <<确实——这会让你在每次使用 << 时都声明另一个变量。 .

关于ruby - 如何将 'each' 方法添加到 Ruby 对象(或者我应该扩展数组)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2080007/

相关文章:

ruby - 检查对象中是否存在属性

ruby - 如何匹配不是字母、数字或空格的内容?

mysql - 从 db : how to consider only date in datetime field? 中检索数据

ruby-on-rails - rails : Could not load database configuration. 没有这样的文件 -

ruby-on-rails - 使用 Nokogiri 将 XML 提要解析为 Ruby 对象?

Ruby:转换哈希键

ruby - 方法和变量名相同

ruby - 如何编写正则表达式以仅查找四位数的数字?

ruby - 匹配上传的 PDF 文档的副本?

通过 NVM 安装 Ruby 失败并出现依赖项错误