English 中文(简体)
Ruby字符串的可变性
原标题:
  • 时间:2009-01-23 16:03:53
  •  标签:

这可能是一个有点入门级的问题,我最近一直在努力提高自己的 Ruby 技能,开始阅读了精彩的《Ruby 编程语言》。其中提到的一件事是字符串字面量被认为是可变的,在循环中最好使用变量而不是字面量,因为在每次迭代中都会实例化一个新字符串。

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

编写:

阅读thenduks的答案后,我想我可能有了答案。据我所知,像Java或C#这样的语言没有破坏性的字符串方法(它们使用upcase,但不是upcase!)。由于存在像upcase!或<<这样的东西,文字不能是不可变的。

并不100%确定,另一个可能性是它是在编译时发生的内部化,这是在脚本语言中不会发生的事情。

最佳回答

不太确定你的问题是什么,但请考虑以下代码:

10.times { puts "abc".object_id }

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

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

upcase! 方法将字符串变为大写,下一次迭代中,第一次迭代中创建的字符串不再相同。

也许您可以发布一个让您感到困惑的代码示例?

问题回答

暂无回答




相关问题
热门标签