考虑下面的代码:

$ irb
> s = "asd"
> s.object_id   # prints 2171223360
> s[0] = ?z     # s is now "zsd"
> s.object_id   # prints 2171223360 (same as before)
> s += "hello"  # s is now "zsdhello"
> s.object_id   # prints 2171224560 (now it's different)

似乎可以通过创建新字符串来更改单个字符.然而,添加到字符串显然会创建一个新字符串.

Are strings in Ruby mutable?

推荐答案

是的,与Ruby不同,Python中的字符串是可变的.

s += "hello"not"hello"后面加上了"hello"——创建了一个全新的字符串对象.要附加到字符串"in-place",请使用<<,如:

s = "hello"
s << "   world"
s # hello world

Ruby相关问答推荐

BasicObject 的 singleton_class 的超类如何以及为什么是 Ruby 中的 Class 类?

有没有办法向用户返回 nil 消息但不中断 ruby​​ 中的应用程序?

为什么我的二维 Ruby 数组的多个值会发生变化,尽管只更改了其中一个?

生成带有小写字母和数字的唯一随机字符串

如何在新行之间拆分字符串并保留空白行?

在 rake 任务中提问

Ruby on Rails:你能把 Ruby 代码放在 YAML 配置文件中吗?

带有索引的 Ruby `each_with_object`

出于调试目的,如何打印有关 NET:HTTPRequest 的信息?

Ruby 中的 :+ 和 &:+ 是什么?

Coffeescript 中等效的 Ruby .times

符号到字符串问题

Ruby 中的抽象方法

读取文件时如何避免 UTF-8 BOM

我应该在我的 ruby​​ 脚本中定义一个 main 方法吗?

rails 控制台、RVM 和 readline 的问题

从类对象获取类位置

if语句末尾带有then有什么区别?

遍历数组的前 n 个元素

如何从字符串创建 Ruby 日期对象?