他们引用同一个对象:
a = "Hello world" # a now references #-633222538
b = a # b now references #-633222538, too
b << " i say" # this appends " i say" to #-633222538
a # a still references #-633222538
String#<<
不分配新对象,它附加到给定的字符串,从而改变接收者。
我想要一份副本,您可以使用clone
或dup
:
b = a.clone
a == b #=> true (same string values)
a.equal? b #=> false (different objects)
关于整数
引用没有区别:
a = 100
a.object_id #=> 201
b = a
b.object_id #=> 201
现在两者都a
引用b
同一个对象。唯一的区别是整数不能在 Ruby 中更改,它们是固定的。
将变量作为参数传递
再次,引用被传递:
a = "foo"
p = proc { |x| x << "bar" }
p.call(a)
a
#=> "foobar"