字符串破坏性方法似乎不适用于字符串切片

我有一个字符串,我想把第一个字母大写。 我尝试了以下方法:

x='abc' x[0].upcase! # => "A" x # => "abc" 

它不能按预期工作,即使方法是upcase! 是破坏性的。 以下作品:

 x='abc' x[0] = x[0].upcase # => "A" x # => "Abc" 

有人可以解释为什么要upcase! 上面不起作用?

x[0]返回一个新字符串。 您正在修改此新字符串,然后您不执行任何操作。

注意:

您可以使用capitalize方法执行相同的操作:

 x='abc' x.capitalize! x #=> 'Abc' 

upcase! 是破坏性的,它修改字符串x[0] ,但不修改x 。 你没有对x做任何事情upcase!

它是一个不同的字符串对象。 您可以找出对象上是否使用object_id并进行比较。