ruby – 我如何知道对象是否可以复制?

我正在实现类的to_a方法,我想要复制所有可以复制的对象(如String),同时只留下其他类型(如Symbol和Integer).首先我认为这很简单:

if object.respond_to? :dup
  object.dup
else
  object
end

事实证明,所有对象都响应:dup,但整数和符号会引发类型错误.我能做到这一点:

begin
  object.dup
rescue TypeError
  object
end

但我想避免使用控制流的异常.

有没有办法检查是否可以复制对象而不依赖于异常?

我正在使用Ruby 2.0.0

最佳答案 无法给你一个好的回复,但这是我试图要求ruby核心团队添加功能的例子(除非其他人找到一种简单的方法来确定对象是否可以复制).

考虑到BasicObject的所有对象都是从Object类继承的,所以这不应该是一个很大的补充.

那么也许这就是.duplicable?可以添加到核心.

bugs.ruby-lang.org/projects/ruby-trunk

点赞