整数变量按值传递,字符串变量按引用传递?
Integer variables pass by value, string variables by reference?
下面对 b
所做的修改也对 a
进行了修改:
a = 'taco'
b = a
b << 's'
a #=> tacos
当我通过将变量 x
指向另一个变量 y
来分配它时,x
仍然是 y
的快捷方式; x
和 y
将是相同的。 dup
方法似乎证实了这一点;通过说 b = a.dup
,b
在赋值时获取 a
的值而不是快捷方式。
但这不会发生在整数上。当我分配 b
时,它似乎得到了 a
:
的值
a = 4815
b = a
b /= 2
a #=> 4815
似乎字符串变量按引用传递,而整数变量按值传递。这似乎不对;我知道我的理解有问题,但我不确定是什么。
不管你在争论什么,b /= 2
是 b = b / 2
的语法糖。因此,新的b
是b / 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 总是 按值传递。但是传递的值是一个指向值的指针,所以多个变量可以包含指向同一个值的同一个指针的多个副本。
下面对 b
所做的修改也对 a
进行了修改:
a = 'taco'
b = a
b << 's'
a #=> tacos
当我通过将变量 x
指向另一个变量 y
来分配它时,x
仍然是 y
的快捷方式; x
和 y
将是相同的。 dup
方法似乎证实了这一点;通过说 b = a.dup
,b
在赋值时获取 a
的值而不是快捷方式。
但这不会发生在整数上。当我分配 b
时,它似乎得到了 a
:
a = 4815
b = a
b /= 2
a #=> 4815
似乎字符串变量按引用传递,而整数变量按值传递。这似乎不对;我知道我的理解有问题,但我不确定是什么。
不管你在争论什么,b /= 2
是 b = b / 2
的语法糖。因此,新的b
是b / 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 oneFixnum
object instance for any given integer value, so, for example, you cannot add a singleton method to aFixnum
. Any attempt to add a singleton method to aFixnum
object will raise aTypeError
.
您需要了解变量和值之间的区别。 变量指向值。多个变量可以指向同一个值。
在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 总是 按值传递。但是传递的值是一个指向值的指针,所以多个变量可以包含指向同一个值的同一个指针的多个副本。