Ruby改变了多个变量,但它们不应该改变

时间:2018-04-07 21:29:20

标签: ruby

当我尝试使用''缩短数组时,所有其他变量的输出也会发生变化

message = "bot.start"
seperator = message
command = seperator
command[0..3] = ''
message #=> "start"

输出应为"bot.start"。 Ruby应该在将变量彼此分离时遇到问题。有什么问题?

2 个答案:

答案 0 :(得分:1)

在当前版本的Ruby中,字符串是可变的。也就是说,您可以更改字符串的实例。

在您的示例中,messagecommandseparator都是指向同一字符串实例的不同变量。执行[0..3] = ''时,您将更改所有变量指向的字符串。

如果您需要创建不同的实例,请使用dup复制字符串:

command = seperator.dup

或者,不要修改字符串并使用返回字符串新实例的API:

command = seperator[4..-1]

答案 1 :(得分:0)

执行第4行时

command[0..3] = ''

您抓取bot.并更改为bot. => ''

这就是它返回''start

start的原因

https://repl.it/repls/BlushingThoughtfulOrigin