赋值运算符如何在Ruby中工作?

时间:2011-10-27 09:09:04

标签: ruby variable-assignment

我在ruby中编写了一段简单的代码,但它并没有像我期望的那样工作。我认为这个问题来自于对ruby如何工作的误解,特别是相对于其他语言,赋值运算符的工作原理。这就是我写的:

    @instance1 = @clock
    @clock.tick!
    @clock.tick!
    @clock.tick!
    @instance2 = @clock

    puts " instace1.seconds: #{@instance1.seconds}, instance2.seconds: #{@instance2.seconds}"

'Clock'是一个类,有一个值,秒,一个方法'tick!'它将秒增加1,方法'seconds'返回秒值。秒数被初始化为0.

现在,当我运行此代码时,输​​出为: “instace1.seconds:3,instance2.seconds:3”

但我期望的输出是: “instance1.seconds:0,instance2.seconds:3”

因为我在更改时钟之前已经为intance1分配了@clock 的值,之后我没有做任何修改@ instance1的事情。

对我来说,这意味着ruby会在某些上下文中将对象指定为指针,并且会进行隐式解除引用。这些背景是什么? (类变量?,大对象?)

如何明确分配?换句话说,我如何取消引用变量?

就像,在C中,我会做类似的事情:

*instance1 = *c

(虽然从指针算术开始已经很长时间了,所以这是一个粗略的例子

1 个答案:

答案 0 :(得分:6)

Ruby通过引用而不是值来分配。您可以做的是@instance1 = @clock.dup@instance1 = @clock.clone