我正在实现类的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