整数变量按值传递,字符串变量按引用传递?

Integer variables pass by value, string variables by reference?

下面对 b 所做的修改也对 a 进行了修改:

a = 'taco'
b = a
b << 's'
a #=> tacos

当我通过将变量 x 指向另一个变量 y 来分配它时,x 仍然是 y 的快捷方式; xy 将是相同的。 dup 方法似乎证实了这一点;通过说 b = a.dupb 在赋值时获取 a 的值而不是快捷方式。

但这不会发生在整数上。当我分配 b 时,它似乎得到了 a:

的值
a = 4815
b = a
b /= 2
a #=> 4815

似乎字符串变量按引用传递,而整数变量按值传递。这似乎不对;我知道我的理解有问题,但我不确定是什么。

不管你在争论什么,b /= 2b = b / 2 的语法糖。因此,新的bb / 2(或a / 2),与a.

无关

正确,参见 Fixnum:

Fixnum objects have immediate value. This means that when they are assigned or passed as parameters, the actual object is passed, rather than a reference to that object.

Assignment does not alias Fixnum objects. There is effectively only one Fixnum object instance for any given integer value, so, for example, you cannot add a singleton method to a Fixnum. Any attempt to add a singleton method to a Fixnum object will raise a TypeError.

您需要了解变量之间的区别。 变量指向。多个变量可以指向同一个值。

在Ruby中,只有修改变量的方法是通过赋值,或者简单的

foo = :something

或复合赋值

foo ω= :something # for some operator ω
# e.g.
foo += :something
foo <<= :something
foo ||= :something

如果您修改 ,无论您使用什么变量访问该值,该修改都将可见。

这样想:我妈妈叫我"son",我朋友叫我"Jörg",我好朋友叫我"jwm",我乐队同事叫我[=45] =],女朋友叫我"baby",但不管她们怎么叫我,我剪了头发头发就没了,不管她们叫我什么名字。但是,如果我的女朋友为标签 "baby" 分配了一个新值,那么这对我没有影响。 (好吧……请耐心等待,这是一个类比:-D)

在Ruby中,<<通常会修改接收者,而/则不会。

但是,Ruby 总是 按值传递。但是传递的值是一个指向值的指针,所以多个变量可以包含指向同一个值的同一个指针的多个副本。