ruby 变量作为同一对象(指针?)

标签 ruby variables pointers

>> a = 5
=> 5
>> b = a
=> 5
>> b = 4
=> 4
>> a
=> 5

如何将“b”设置为实际的“a”,以便在示例中,变量 a 也将变为 4。谢谢。

最佳答案

class Ref
  def initialize val
    @val = val
  end

  attr_accessor :val

  def to_s
    @val.to_s
  end
end

a = Ref.new(4)
b = a

puts a   #=> 4
puts b   #=> 4

a.val = 5

puts a   #=> 5
puts b   #=> 5

当您执行 b = a 时,b 指向与 a 相同的对象(它们具有相同的 object_id).

当你执行 a = some_other_thing 时,a 将指向另一个对象,而 b 保持不变。

对于Fixnumniltruefalse,如果不更改,则无法更改值>object_id。但是,您可以在不更改 object_id 的情况下更改其他对象(字符串、数组、哈希等),因为您不使用赋值 (=).

字符串示例:

a = 'abcd'
b = a

puts a  #=> abcd
puts b  #=> abcd

a.upcase!          # changing a

puts a  #=> ABCD
puts b  #=> ABCD

a = a.downcase     # assigning a

puts a  #=> abcd
puts b  #=> ABCD

数组示例:

a = [1]
b = a

p a  #=> [1]
p b  #=> [1]

a << 2            # changing a

p a  #=> [1, 2]
p b  #=> [1, 2]

a += [3]          # assigning a

p a  #=> [1, 2, 3]
p b  #=> [1, 2]

关于ruby 变量作为同一对象(指针?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7169277/

相关文章:

javascript - 传递局部变量问题

c# - 在 c# 中是否有这样的运算符表示 'AndAlso' 引用第一个变量?

c++ - 转发指向值的指针,而不是值本身

ruby-on-rails - rspec - 如何检查 allow_blank 是否存在

Ubuntu 上的 Ruby 安装真的一团糟

python - 循环python的多个变量

python - 如何在函数中保存状态?

c++ - 分配的内存被回收

我可以通过函数更改初始化的字符指针吗?

ruby - 按 Ruby 中哈希的值降序排序