类似于变量的引用

时间:2014-01-29 09:35:58

标签: c++ ruby

我怎样才能在Ruby中做到这一点? 例如,在Ruby中:

a = [1,2,3]
h= {vara: a} 
p h[:vara] # [1,2,3]

a = [42,43,44]
p h[:vara] # [1,2,3] - still the same

Hash显示相同的结果(数组[1,2,3])虽然我已更改a 至于这个例子,我希望哈希显示a更改时的不同结果:

a = [1,2,3]
h= {vara: a} 
p h[:vara] # [1,2,3]

a = [42,43,44]
p h[:vara] # [42,43,44] - changed!

一般情况下如何操作 - 未指定变量或容器(上例中的散列)?

例如,在C ++中,您可以使用 reference

#include <iostream>
#include <stdlib>
int main(void)
{
   int a = 10;
   int &var = a;
   std::cout<< "\na = "<< a <<"\n";
   a = 42;
   std::cout<< "\nnew var = " << var << "\n"; //
   std::cout<< "\nnew a = " << a << "\n";

   system("pause");
   return 0;
}

将产生:

a = 10

new var = 42

new a = 42

Ruby中有这样的东西吗?

2 个答案:

答案 0 :(得分:4)

您只需使用Array方法替换#replace实例的包含,因为=赋值运算符只是为变量名提供另一个实例

a = [1,2,3]
h = {vara: a} 
h[:vara]
# => [1,2,3]

a.replace [42,43,44]
h[:vara]
# => [42, 43, 44]

答案 1 :(得分:3)

Ruby有引用,但它们更像是C ++指针(使用透明解除引用)。

没有相当于C / C ++的引用。但是,您总是可以编写C扩展名。

您可以替换指向的内容,而不是完全替换“a”引用

a = [1,2,3]
h= {vara: a} 
p h[:vara] 

a.replace([40, 41, 42]) # <== note here
p h[:vara] 
# >> [1, 2, 3]
# >> [40, 41, 42]

在这种情况下,h[:para]a仍然指向同一个数组。但是当您分配到a时,链接就会中断。