可以在ruby中扩展数组方法吗?

可以在ruby中扩展数组方法吗?,ruby,arrays,Ruby,Arrays,我有一个实例数组,例如class Result,我想将结果名称而不是结果名称与一个“,”连接起来,如下所示: @results=[result1, result2...] results.join(", ") do |r| r.name end join方法应该是数组的extensino方法,我希望它对程序中的所有数组都可用 可能吗?是的,这是可能的 class Array def join_names collect(&:name).join(", ") end

我有一个实例数组,例如class Result,我想将结果名称而不是结果名称与一个“,”连接起来,如下所示:

@results=[result1, result2...]
results.join(", ") do |r|
   r.name
end
join方法应该是数组的extensino方法,我希望它对程序中的所有数组都可用

可能吗?

是的,这是可能的

class Array
  def join_names
    collect(&:name).join(", ")
  end
end

但这使得您编写的代码更有可能与向数组类添加方法的其他库发生命名空间冲突。

#join
已经是数组方法了。。。你到底想要什么?如果它只对响应“name”的对象数组有效,为什么它对所有数组都可用?此外,您已经可以收集或映射并获得相同的效果,而不会污染具有消息特定功能的通用类。是的,这是可能的。是的,join已经是数组的一种方法,我想要的是可以占用一个块的join。像def join(delim){array.map{x | yield(x)}.join(delim)}一样,您发布的代码甚至不起作用,因为
join
不占用块。您需要使用
收集
,然后使用
加入
。谢谢。我想要的应该是这样的,这意味着我想要覆盖/重载?数组的现有连接函数,可能存在什么问题?类数组def join(delim),如果给定块_?self.map{| item | yield(item)}.join(delim)else self.join(delim)end endendoverriding内置函数不是一个好主意。扩展数组并定义一个新方法,如
join\u names
,如这里的答案所示。