• 自从听你说了 lxr 之后,我也一直没有动手搞过~ 。周末搞搞看看。

  • ruby 中的浅拷贝 at 2012年03月08日

    #12 楼 @loveky 你是指你的第二个关于数组的例子吗? 大体流程:

    1. b = a.clone 会产生一个新的 Array 对象 b(其实是引用) a 中包含的原有的对象引用也被拷贝到 b。注意是引用,不是对象。如下例中 m 的‘a’这个对象引用。
    2. b.push(4) 是对 b 所引用的对象进行操作,这个对象和 a 所引用的对象不一样,当然不会改变 a。

    为了你不迷糊,缩小一下叙述范围,如果一个对象内部含有对其他对象的引用,在浅拷贝时,先创建一个新对象,然后再拷贝内部包含的其他对象 (比如说是实例变量) 的引用 (这些是引用,而不是对象)。

    m=['a']
    n=m.clone    #  克隆产生一个新对象。
    
    n[0] << 'b'    # n[0]和m[0]都指向都一个对象,对其修改,m[0]和n[0]都会改变
    
    p n  # ["ab"]    
    p m  # ["ab"]
    
    n << 'c'    #对n 所引用的对象进行操作
    p m          # ["ab"]   m没有变化  
    p n          # ["ab","c"]   n 增加了一个元素
    
    
    
    
    
    

    建议你看看@hooopo 的帖子。其实,关于对象引用的问题,给你画个图你就能明白了。写字反而容易让人迷糊。

  • 收藏!

  • ruby 中的浅拷贝 at 2012年03月08日

    #10 楼 @hooopo 好文章~ 总结的很全面。以前就看过你的这篇文章,受教了 :>

  • 程序员,保重身体。 at 2012年03月08日

    #17 楼 @raven 受教了 感谢!

  • ruby 中的浅拷贝 at 2012年03月08日

    #8 楼 @daqing 我家在东营~ 人现在沈阳。呵呵 :> 此楼已歪:)

  • ruby 中的浅拷贝 at 2012年03月08日

    #5 楼 @daqing 你在东营吗?我家在东营住,回去时有时间聚一下哈 :>

  • ruby 中的浅拷贝 at 2012年03月08日

    #5 楼 @daqing @str也只是一个引用而已。 :>

  • ruby 中的浅拷贝 at 2012年03月08日

    #1 楼 @daqing @loveky 其实不是这样的。 在 Ruby 里,我们所说的变量等实际都是对 对像的引用。浅拷贝只是拷贝引用而已,不是拷贝引用所指的对象。

    m = ['a','b']                      # ["a", "b"] 
    n = m.clone                        # ["a", "b"]
    
    m.object_id == n.object_id         # false
    m[0].object_id == n[0].object_id   # true
    m[1].object_id == n[1].object_id   # true
    
    
    

    代码中 n 是由 m 克隆来的。指向一个新对象,所以 id 不同。 但是,m 和 n 中的元素都是指向相同的对象,对象本身并没有进行拷贝。所以 id 是相同的。 当然,这和 Array 的第 1 层或是第几层也没关系。

    想实现深 copy,可以自行实现 initialize_copy 来达到深 copy 的目的。

  • Hash.new 的疑问 at 2012年03月08日
    1. Hasn 的 [ ] 方法大体是这个流程:先从内部的 hash table 里查找 key 对应的 value。如果找不到则返回默认值。
    2. 在你的那个贴子里提到了,fetch 默认形式是在找不到 value 的情况下,会抛出异常。这个方法的行为就是如此。这个方法还有其他两种形式,可以不抛出异常。请参考 api 文档。

    [ ] 和 fetch 是两个方法,行为是不一样的。不要混淆 :>

  • 程序员,保重身体。 at 2012年03月08日

    #14 楼 @lgn21st 哈哈~,了解了。 另外,我严重怀疑你身体全身的细胞都是幽默细胞。哈哈

  • 程序员,保重身体。 at 2012年03月08日

    #12 楼 @lgn21st 好奇的问问,Intridea 的员工 (中国) 都是在家办公吗?

  • 程序员,保重身体。 at 2012年03月08日

    #7 楼 @raven 腿搬不上来啊~ 有没有循序渐进的好方法,分享一下吧 :> 需要做压腿之类的前期准备吗?

  • 程序员,保重身体。 at 2012年03月08日

    #2 楼 @raven 你能真的能跏趺坐吗?佩服! :>

  • 用 [ ] 访问 hash,在形式上比较直观。在 value 值不存在时,返回 nil。 用 fetch 的默认形式,在 value 值不存在时,会抛出异常。另外,如同@ming 所说,在在 value 值不存在时,可以做一些处理。

    用 fetch 比较利于排错。比如说,某个 value 不存在,它就直接抛出异常了。[ ] 则是返回 nil. 但是,看代码,用 [ ] 的形式还是很多的。

  • 程序员,保重身体。 at 2012年03月08日

    呵呵,这个方法可以试试 :>

  • 外星人在沈阳~

  • #4 楼 @hhuai 对。:>

  • #1 楼 @hhuai +1 补充一点:整数的 id 固定是指 Fixnum,Bignum 的对象 id 不是固定的。 如:

    1000000000000000000000000.object_id
    
    
  • 我的 Xubuntu 终于联上网了 at 2012年03月08日

    单位的电脑也是 windows,很多工具也是 ruby 写的,也没如此之纠结。Ruby 语言本身在 windows 没啥问题,就是 native gem 的编译需要花些时间来掌握而已。

  • 我的 Xubuntu 终于联上网了 at 2012年03月08日

    解决问题的过程 才是最大的收获~ :>
    遇到问题回避之~,则初时痛快,实损失的是自己 . 加油!

  • win 下开发 rails 痛苦啊 at 2012年03月08日

    #6 楼 @d4rkl0rd 是不是代码有问题?有些 native gem 在 windows 存在不稳定的情况。

  • win 下开发 rails 痛苦啊 at 2012年03月08日

    还是用@Rei 的方案 会比较少折腾 :>

  • 现在咱们坛子里的技术分享帖略少一些~ :>

  • 我觉得两个坛子现在都很好~,各自有自己的特色也是好事,只要咱们两个坛子都往好的方向发展就行~。没必要两个坛子的氛围完全一致 :>

    题外话,我个人是比较不赞同在技术论坛里加入政治意识形态的气氛。

  • 我们不应该排斥 Windows at 2012年03月08日

    #57 楼 @hhuai 呵呵~ 作为一门流行语言(指 Ruby,不是 Rails)而言,对 windows 的平台的支持与其他语言相比,Ruby 还需要继续加油:> @fsword 如果是具体某个作品的话,那就看作者本人的意愿了 :>,Redis 的作者也是不太支持 windows。

    Ruby 的世界里不仅包括 Rails 和 Web 的话题~,还有其他很有意思的东东~ :>

  • 我们不应该排斥 Windows at 2012年03月07日

    #54 楼 @ruchee Ruby 社区的包容性一直是很强的,虽然推荐使用 Mac 或是 Linux 开发,但是如果有人提出 windows 相关的开发问题,社区也会热心的回答。

  • #55 楼 @lgn21st 我猜测应该是 H.J.K.L

  • #5 楼 @yorzi 这个挺不错啊~ :> 不过,也不用激动的连发 4 遍吧 ,哈哈