【发布时间】:2013-04-12 07:51:30
【问题描述】:
来自沉重的 C++ 背景,我很难理解 ruby 函数参数是如何传递的,或者更确切地说,我很难理解传递引用和传递引用值之间的语义差异这似乎是红宝石社区的区别。有很多关于这个主题的信息相互矛盾的资源(包括我在下面发布的这个网站,但回复似乎有很大差异)。
Is Ruby pass by reference or by value?
我的困惑是在 C++ 中通过引用传递:
int function(Object& i)
{
//cannot change the memory location of i in this function
//only the value can change
Object.param1 = 3;
}
或按指针传递:
int function(Object* i)
{
//this change will be visible in the calling function scope
Object->param1 = 4;
//this however will have no effect from the calling code
i = new Object();
}
在我看来,在这两种情况下,对象中包含的值都可以改变;但是,它的引用/指针不能。然而,我看到人们基于您无法更改引用指向的内容这一事实来区分按引用传递和按值传递引用。但是,如果没有指向指针的指针就无法做到这一点,我不明白为什么要进行这种区分。
在我看来,Ruby 的行为方式相同:
class TestObject
attr_accessor :param1
def initialize()
@param1 = 0
end
end
def func(objtst)
objtst.param1 = 12
end
obj_test = TestObject.new
puts obj_test.param1 #outputs 0
func(obj_test)
puts obj_test.param1 #now outputs 12
那么按引用传递和按引用传递值有什么区别?
【问题讨论】:
-
请考虑
void f(int& i) { i = 6; }和def f(i); i = 6; end。 -
我确实在我的问题中提到了另一个与我的问题相似的问题,但它并没有解决我看到的按引用传递与按值传递区别的区别由许多人制作。
-
我认为您对选择不当的示例感到困惑。
标签: c++ ruby pass-by-reference