我怎样才能在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中有这样的东西吗?
答案 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
时,链接就会中断。