【发布时间】:2015-01-28 10:20:57
【问题描述】:
我正在实现一个类的to_a 方法,我希望所有可以 被复制的对象(如String)都被复制,同时保留其他类型(如@987654328) @ 和 Integer) 单独。首先我认为这很简单:
if object.respond_to? :dup
object.dup
else
object
end
事实证明,所有对象都响应:dup,但整数和符号会引发类型错误。我可以这样做:
begin
object.dup
rescue TypeError
object
end
但我想避免对控制流使用异常。
有没有办法检查一个对象是否可以在不依赖异常的情况下被复制?
我正在使用 Ruby 2.0.0
【问题讨论】:
-
@Surya:将其添加到问题中,对不起
-
@Surya:是的,
#respond_to?为 所有 对象返回true。那就是问题所在。#dup引发整数和符号类型错误。 -
我确定您已经遇到过this。那个人也有同样的想法。我想你可以创建一个助手,但无论如何它仍然会使用异常处理。
-
我应该滚动further down。看起来像 Rails(特别是 ActiveSupport gem),添加了一个方法
duplicable?方法。添加那个宝石是否可行? -
@PaulRichter 似乎 Rails 对其进行了硬编码。 api.rubyonrails.org/files/activesupport/lib/active_support/… @Hubro 您可以要求您的类/模块的用户实现 2/3 方法:
duplicable?和dup/clone(已定义)。
标签: ruby