代码之家  ›  专栏  ›  技术社区  ›  Matt Briggs

红宝石串易变性

  •  9
  • Matt Briggs  · 技术社区  · 15 年前

    这可能是一个有点不切实际的问题,我最近一直在努力提高ruby的水平,并开始阅读《奇妙的故事》 The Ruby Programming Language . 提到的是字符串文字被认为是可变的,因此在循环中最好使用变量而不是文字,因为新字符串将在每次迭代中实例化。

    我的问题是为什么?起初我以为这是因为插值,但符号是不可变的,它们支持插值。来自静态背景,这对我来说没有多大意义。

    编辑:

    读后 thenduks 回答,我想我可能有。另外,像Java或C这样的语言没有破坏性的字符串方法(它们使用upcase,但不使用upcase!)。因为像upcase这样的事情!或<&书信电报;,文本不能是不可变的。

    1 回复  |  直到 7 年前
        1
  •  7
  •   rfunduk    15 年前

    不确定你的问题到底是什么,但是考虑下面的代码:

    10.times { puts "abc".object_id }
    

    这会打印出10个不同的id。为什么?仅仅因为你知道这个字符串不会改变并不意味着Ruby会改变。如果你这么想 "abc" 只应创建一次,如果执行以下操作,会发生什么情况:

    10.times { puts "abc".upcase! }
    

    这个 upcase!

    也许发布一个令您困惑的代码示例?