来自沉重的 C++ 背景,我很难理解 ruby 函数参数是如何传递的,或者更确切地说,我很难理解传递引用和传递引用值之间的语义差异,这似乎成为红宝石社区中的区别。有很多关于这个主题的信息相互矛盾的资源(包括这个网站,我在下面发布了这个网站,回复似乎有很大不同)。
我的困惑是在 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();
}
在这两种情况下,在我看来,包含在 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
那么按引用传递和按引用传递值有什么区别呢?