我对 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
?为什么整数不指向另一个变量的地址?
最佳答案
通常 - ruby 变量保存引用,而不是指向值的指针。当您分配:
a = [3]
b = a
b
引用与 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]
关于c++ - Ruby 和指针与其他语言相比?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57727934/