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



以下b所做的修改也是为了a

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

当我通过将变量指向另一个变量y来分配x变量时,x仍然是y的快捷方式; xy将是相同的。这似乎被dup方法所证实;通过说b = a.dupb得到a在赋值的那一刻的价值,而不是捷径。

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

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

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

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

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

foo = :something

或复合分配

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

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

可以这样想:我妈妈叫我"儿子",我的朋友叫我"Jörg",我的好朋友叫我"jwm",我的乐队同事叫我">

Jörgislaw",我女朋友叫我"宝贝",但不管他们怎么称呼我,如果我剪头发,我的头发就会消失,不管他们用什么名字来称呼我。但是,如果我的女朋友为"baby"标签分配了一个新的值,那么这不会影响我。(嗯...请耐心等待,这是一个类比:-D

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

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

不管

你在争论什么,b /= 2b = b / 2的语法糖。因此,新的bb / 2(或a / 2(,这与a无关。

错,见Fixnum

Fixnum对象具有即时价值。这意味着当它们作为参数赋值或传递时,将传递实际对象,而不是对该对象的引用。

赋值不会为对象Fixnum别名。对于任何给定的整数值,实际上只有一个Fixnum对象实例,因此,例如,不能将单一实例方法添加到Fixnum。任何向Fixnum对象添加单一实例方法的尝试都会引发TypeError

最新更新