我会尝试用一个简单的例子来说明这个问题的对象标识:更改形式参数
def enclose(x)
[x]
end
在我的应用程序,enclose
做更复杂的东西,但在本质上它返回一个数组,内容其中完全由参数x的值决定。我可以用它这样的:
foo = 'abcd'
....
foo = enclose(foo)
现在我的问题:是否可以写一个方法enclose!
,它只是通过其封闭的版本替换参数,这样的例子可以写成
foo = 'abcd'
....
enclose!(foo)
由于Ruby通过引用传递参数,我认为这可能是可能的。天真的方法,
def enclose!(x)
x = [x]
end
不工作 - 我想这是因为分配创建一个新的对象,并离开实际参数不变。
是否有办法,我可以达到我的目标?我认为在Smallalk中,会有一种方法become
这会改变对象的身份,但是在Ruby中我没有发现类似的东西。
是不是'foo = enclose(foo)'你真正想要什么? – Candide
这是一样的(你可以从我的帖子中看到),只是我想提一下变量'foo'一次。我从'chomp!'的String方法'chomp'中接受了这个想法,但是使用了'String',它可以工作,因为您可以在不更改String对象身份的情况下更改字符串的内容。在我的情况下,某些任意类型的值将被更改为'Array'类型的值,现在我意识到这在Ruby中是不可能的。 – user1934428