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 那是你还没用过 clone 与 dup 吧?如果写过框架,你应该就了解了。
clone
dup
有时候,要必须 frozen 对象,防止外部修改,要必要的时候又需要 dup 对象,如果使用错误的调用,必然会出错。
frozen
#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/1712, http://ruby-china.org/topics/2055。
#11 楼 @realwol #12 楼 @xieyu33333 这帖子至少比那些问数据库连接出错,Windows 跑不动 rails 的问题好嘛