我一直在使用 Ruby on Rails 有一段时间没有学习 Ruby,现在我正在学习 Odin 项目。我不太确定这个问题的答案: 字符串是“可变的”是什么意思,为什么要关心?
更新: 所以现在我明白可变字符串基本上意味着内存中的值可以在创建字符串后更改。
不可变字符串是指内存中的值一旦创建就不能改变,只能改变引用。
基于以下代码的结果:
a = "foo"
a.object_id
=> 70218039369160
b = "bar"
a << b
=> "foobar"
a.object_id
=> 70218039369160
我可以说 Ruby 中的字符串是可变的吗?因为同一内存中的值发生了变化
a += b
=> "foobar"
a.object_id
=> 70218039184800
和 +
Ruby 中的方法实际上创建一个新的 String
object 而不是更改原始 String 对象的值,这就是对象 id 更改的原因。
我的问题是如果我使用 +=
会不会导致任何安全问题?和 <<
可以互换吗?
最佳答案
这意味着您可以修改字符串的现有实例,而无需构造新实例。考虑以下代码:
str1 = "foo"
str2 = str1
str1 += "bar"
在 javascript 等字符串不可变的语言中,str2
的值仍将是 "bar"
执行该代码后,如您所见here .但是,在字符串可变的语言中,如 ruby,当您附加 "bar"
时在 str1
的末尾(使用 ruby 运算符 <<
执行此操作)您实际上是在修改实例,而不是创建新实例,所以 str2
也将被修改,如您所见here .
PS: 注意ruby 中在字符串末尾追加 操作符是<<
而不是 +=
(+=
实际上创建了一个新字符串,但不是因为它被迫这样做,就像在 javascript 中一样)。
关于ruby - 字符串是 "mutable"是什么意思,为什么要关心?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33686992/