字符串替换Ruby

Mik*_*les 2 ruby

我试图在ruby中玩我的代码.

这是我得到的:

name = "Rol"
title = name
name = "Sam"
puts name
puts title

OUTPUT:
Sam
Rol

name = "Rol"
title = name
name.replace("Sam")
puts name
puts title

OUTPUT:
Sam
Sam
Run Code Online (Sandbox Code Playgroud)

基本上我想知道为什么当我使用重新分配等号时它只更改变量名称并将标题保留为旧值.但是在使用replace方法时,它会改变两者的值?

在外行人的任期中对此有何解释?红宝石在这里新手.

Nei*_*ter 6

简单的外行术语是:

  • 作业改变了变量.

  • 变异方法改变了对象.

变量和对象在Ruby中是不同的东西.每个变量都是指向对象的标签.每个方法调用都发送到一个对象.为方便起见,我们经常简化讨论,因为很容易说"名字是'Sam'",详细地说我们的意思是"存储在名字变量指向的String对象中的值是'Sam'"

在你的第一个例子中:

该行name = "Rol"从文字创建一个新的String对象,"Rol"并将局部变量指向name它.

该行将title = name局部变量title指向同一个String对象.

该行name = "Sam"从文字创建一个新的String对象,"Sam"并将局部变量指向name它.现在name,title指向不同的String对象.

此时有两个独立的String变量,两个不同的变量指向它们,因此它们的任何使用都是分开的.

在你的第二个例子中:

该行name = "Rol"从文字创建一个新的String对象,"Rol"并将局部变量指向name它.

该行将title = name局部变量title指向同一个String对象.

该线name.replace("Sam")修改了对象.首先用于访问对象的变量无关紧要.title.replace("Sam")会有相同的结果,因为它指的是同一个对象.