使用'操作Ruby中的字符串+';和';插入';
我有以下Ruby代码:使用'操作Ruby中的字符串+';和';插入';,ruby,variables,Ruby,Variables,我有以下Ruby代码: a = "Python" b = a.+"xyz" c = b.insert(2, "oo") puts a puts b puts c 我期待着: Python Pythonxyz Pyoothonxyz 但我得到: Python Pyoothonxyz Pyoothonxyz 有人能帮我吗?我刚开始学习Ruby,这有点令人费解。谢谢你的帮助 a = 'Python' b = a + 'xyz' 作为,String#+返回一个新字符串,该字符串是接收器和参数的串
a = "Python"
b = a.+"xyz"
c = b.insert(2, "oo")
puts a
puts b
puts c
我期待着:
Python
Pythonxyz
Pyoothonxyz
但我得到:
Python
Pyoothonxyz
Pyoothonxyz
有人能帮我吗?我刚开始学习Ruby,这有点令人费解。谢谢你的帮助
a = 'Python'
b = a + 'xyz'
作为,String#+
返回一个新字符串,该字符串是接收器和参数的串联(boldemphasis):
str+other\u str
→ <代码>新建\u str
连接-返回一个新字符串,其中包含连接到str
的other\u str
因此,a
和b
引用不同的字符串
由于,String#insert
修改了字符串,因此字符串仍然是相同的,只是内容不同(粗体强调):
insert(索引、其他str)
→ <代码>str
在给定的索引处的字符前插入other_str
,修改str
。[……]
因此,b
和c
引用相同的字符串
换句话说,代码中总共有两个字符串。一个被a
引用,另一个被b
和c
引用insert
函数正在更改原始字符串。这就是它的工作方式,通常在Ruby中,如果您不想更改原始对象,则需要添加
添加到方法,但默认情况下,insert
的作用与方法相同。复制b
:c=b.dup.insert(2,“oo”)
,请参见下面的@Jörg W Mittag答案。多亏了你们两位,这是非常有价值的见解
c = b.insert(2, 'oo')