我对ruby相当陌生,但来自C/C++背景,我相信我对计算机和编程的工作原理有基本的了解。
在C++中,如果您想要创建指向某个值的指针,您将将其指定为指针:http://www.cplusplus.com/doc/tutorial/pointers/。
示例:
int x = 3;
int *p = &x;
*p = 4;
std::cout << x;这对我来说很有意义,因为现在p指向x的地址,因此当我们改变p的值时,x也会改变。在本例中,x将输出4。
但当我跑的时候
a = []
b = a
a[0] = 3
p b
# => [3]
c = "this is a string"
d = c
c.upcase!
c = "the string has been edited"
p d
# => THIS IS A STRING在ruby中,b输出[3],而对于我来说,它不应该输出任何内容。d输出的是"THIS IS A STRING",而不是"the string has been edited"。Ruby and pointers是另一个问题,它们是如何在ruby中使用指针的。
,我的问题是:,为什么在ruby中数组被看作是指针,它是如何工作的?b是否像在C++中那样指向a的地址?是什么使变量改变了它所指向的地址?例如:如果a = b何时将a != b?为什么整数不指向另一个变量的地址?
发布于 2019-08-30 13:48:39
通常- ruby变量保存引用,而不是指向值的指针。当你分配:
a = [3]
b = ab引用与a相同的数组。字符串也是一样的。
值得一读:https://robertheaton.com/2014/07/22/is-ruby-pass-by-reference-or-pass-by-value/
编辑:
a = [1]
b = a
b
# => [1]
a = [2]
a
# => [2]
b
# => [1]https://stackoverflow.com/questions/57727934
复制相似问题