Ruby Ruby 中的 clone 和 dup 比较

flingjie · 2014年04月29日 · 最后由 alsotang 回复于 2014年05月10日 · 6288 次阅读

ruby 中 clone 和 dup 都是对一个对象的浅拷贝,其区别如下:
1.clone 会拷贝单例方法,而 dup 不会。

a = Object.new
def a.hello
    "hello"
end

a.dup.hello   # raises NoMethodError
a.clone.hello # return "hello"

2.dup 不能对 frozen 状态的对象进行拷贝,而 clone 可以。

非常好的总结~

论坛应该多些这样的帖子,简洁高效!赞!

同意上面的。

而且注意 clone 出来的对象还是 frozen 状态的

其实我想问,此帖意义何在?

谢赞 ^_^ @leozwa 多谢补充,学习了 @realwol 只是将学习过程中的一些问题分享下

#5 楼 @realwol 那是你还没用过 clonedup 吧?如果写过框架,你应该就了解了。

有时候,要必须 frozen 对象,防止外部修改,要必要的时候又需要 dup 对象,如果使用错误的调用,必然会出错。

#7 楼 @lyfi2003 我说的意思是 ruby 参考书里边明确的提到这些东西了。

#8 楼 @realwol 也许你看的那本别人没看过呢,指出哪本书里有好的解释才是有意义的发言,在这冷嘲热讽算什么?

#8 楼 @realwol #9 楼 @xieyu33333 确实,大家互相交流,如果有好的参考书,不妨分享一下。 看了 LZ 最近关于元编程的一些学习总结,其实还都不错。

#9 楼 @xieyu33333 我没有任何”冷嘲热讽“的意思。我只是不觉得应该鼓励这样照搬入门教材的帖子。任何一本书上都会提到这个知识点。而且,对于这点,任何书上的解释都是一样没有任何争议的。我只是觉得帖子应该稍微有可讨论或者延伸性质。如果不是,任何参考书上的任何东西都可以拆一段发帖子,也可以解释为有的人没看过这段。重申一遍,我没有任何你所谓的冷嘲热讽,单纯表达我的观点而已。

#11 楼 @realwol 有没有意义你说了不算,事实是你搜索“ruby clone dup”可以发现 stackoverflow 上有这个问题,顶这个问题和下面答案的人还很多,相关的文章也不少,Ruby China 上以前也有过讨论:http://ruby-china.org/topics/1712http://ruby-china.org/topics/2055

#11 楼 @realwol #12 楼 @xieyu33333 这帖子至少比那些问数据库连接出错,Windows 跑不动 rails 的问题好嘛

14 楼 已删除
15 楼 已删除
需要 登录 后方可回复, 如果你还没有账号请 注册新账号