是';四轮马车记录器';对';状态';这个Ruby示例中的字符串?

是';四轮马车记录器';对';状态';这个Ruby示例中的字符串?,ruby,string,reference,Ruby,String,Reference,在本例中,之所以启动nukes,是因为您对buggy_logger所做的任何更改都会应用于“状态”字符串-就像使用对象引用的副本->当您对引用的副本进行更改时,更改会应用于基础对象->该更改是,反映在对对象的任何其他引用中。因此,换句话说,buggy_logger是“status”对象的别名,而没有专门使用alias关键字?对吗?所以,在ruby中,你只要说 b = a 然后你对b所做的任何修改也会反映在a中。或者这仅仅是因为我们讨论的字符串在Ruby中是可变的 # example-4.rb

在本例中,之所以启动nukes,是因为您对buggy_logger所做的任何更改都会应用于“状态”字符串-就像使用对象引用的副本->当您对引用的副本进行更改时,更改会应用于基础对象->该更改是,反映在对对象的任何其他引用中。因此,换句话说,buggy_logger是“status”对象的别名,而没有专门使用alias关键字?对吗?所以,在ruby中,你只要说

b = a
然后你对b所做的任何修改也会反映在a中。或者这仅仅是因为我们讨论的字符串在Ruby中是可变的

# example-4.rb

status = "peace"

buggy_logger = status

print "Status: "
print buggy_logger << "\n" # <- This insertion is the bug.

def launch_nukes?(status)
  unless status == 'peace'
    return true
  else
    return false
  end 
end

print "Nukes Launched: #{launch_nukes?(status)}\n"

# => Status: peace
# => Nukes Launched: true
#示例-4.rb
status=“和平”
小车记录器=状态
打印“状态:”
印钞车记录器发射核弹:正确

是的,这是因为字符串是对象。试一试

buggy_logger = status.dup
如果需要具有相同初始值的不同对象

至于你关于
alias
的问题,我怀疑你没有正确理解
alias
在ruby中的用法;它用于方法,而不是对象,并且与可变性无关

还要注意,相同的语义将应用于任何类;如果状态是一个数组、一个文件或其他任何东西(前提是它具有适合用作记录器的可变状态),您将得到类似的结果


关于dup的一个警告是。如果对象引用其他对象,则副本也将引用相同的对象。一旦你开始以正确的方式思考,这很好,但在那之前很棘手。

哦,那太酷了——我不知道有dup方法。谢谢。啊,好的。所以不仅仅是字符串。再次感谢。