【问题标题】:Frozen objects in RubyRuby 中的冻结对象
【发布时间】:2013-01-16 05:06:44
【问题描述】:

在 Ruby 中,StringArray(等)对象被“冻结”意味着什么?如何/在哪里设置或修改此属性?

【问题讨论】:

    标签: ruby arrays string


    【解决方案1】:

    这意味着你不能修改它。您通过freeze 方法设置它。

    s = "a"
    

    concat 修改字符串实例。

    s.concat("b")
    # => "ab"
    

    当你冻结字符串时:

    s.freeze
    

    那么,你不能再申请concat了。

    s.concat("c")
    # => RuntimeError: can't modify frozen String
    

    但是,您可以应用不修改接收器的方法:

    s + "c"
    # => "abc"
    

    【讨论】:

      【解决方案2】:

      防止对 obj 的进一步修改。如果尝试修改,将引发 RuntimeError。无法解冻冻结的对象。另请参阅 Object#frozen?。

      a = [ "a", "b", "c" ]
      a.freeze
      a << "z"
      

      产生:

      prog.rb:3:in `<<': can't modify frozen array (RuntimeError)
      from prog.rb:3
      

      Doco

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-03-30
        • 2018-04-13
        • 1970-01-01
        • 2013-11-10
        相关资源
        最近更新 更多