【发布时间】:2013-03-11 23:57:16
【问题描述】:
我正在尝试调整 Ruby/Rails 函数中的变量。许多其他语言的标准内容。
在c中:
void change(int *io){
*io = 1;
}
现在我们都知道 Ruby 是通过引用传递的(笑脸)。这段代码完美运行:
def tester()
value = 'dave'
test_replace(value)
p value.to_s;
end
def test_replace(ioValue)
ioValue.replace 'test'
end
输出是“测试”。
所以问题是:固定数字没有替换方法。它们的传递方式与其他值不同。
所以我的问题是:我如何在 Ruby 中“io”一个“int”?
def tester()
value = 10
test_replace(value)
p value.to_s;
end
def test_replace(ioValue)
ioValue.replace 15
end
哪个加注
10:Fixnum 的未定义方法 `replace'
【问题讨论】:
-
不是真正的对象???它们就是我们所说的不可变的。
-
请不要对这个例子发表评论。这个问题是 100% 人为设计的。价值传递的事情也已经在其他 SO 条目中解决了:)
-
为什么会被否决?我的意思是说实话..通过引用传递是真实的吗?否决票让我很困惑。
-
在您所说的意义上,Ruby 中没有传递引用。所有方法参数都是不可变的局部变量。如果它们碰巧指向一个对象,您可以调用该对象的方法。这些方法可以修改对象,但不能更改变量引用的对象。在 fixnums 的情况下,底层对象本身是不可变的,并且没有提供用于替换它的公共 API。
-
@daveatflow 是的,对象是通过引用传递的。但是,引用是不可变的值,因此如果引用的对象没有自变异方法,则无法更改它。