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