这可能是一个小小的问题,我最近一直试图在ruby上做得更好,并开始阅读精彩的The Ruby Programming Language.提到的是字符串文字被认为是可变的,因此在循环中最好使用变量然后使用文字,因为新字符串将在每次迭代时实例化.
我的问题是为什么?起初我认为这是因为插值,但符号是不可变的,它们支持插值.来自静态背景,对我来说并没有多大意义.
编辑:
看完后thenduks答案,我想我可能有它.AFAIK,Java或C#等语言没有破坏性的字符串方法(它们使用upcase,但不是upcase!).因为像upcase这样的东西!或<<,文字不能是不可改变的.
不是100%肯定,另一种可能性是它发生了编译时实习,这在脚本语言中是不会发生的.
不确定您的问题究竟是什么,但请考虑以下代码:
10.times { puts "abc".object_id }
这打印出10个不同的id.为什么?只是因为你知道这个字符串不会改变并不意味着Ruby会这样做.如果您认为"abc"
只应创建一次,那么如果您执行以下操作会发生什么:
10.times { puts "abc".upcase! }
该upcase!
方法将字符串变为大写,在下一次迭代中,在第一次迭代中创建的字符串不再相同.
也许发布一个令你困惑的代码示例?