【发布时间】:2019-10-23 11:59:02
【问题描述】:
我怀疑 ruby 中的所有对象是否通过引用传递或赋值。因为当我尝试将实例变量分配给本地时。对局部变量所做的更改也会影响实例变量。
这是我的代码。
@name = {:a=> 'sfgs', :b=> 'sdfsd'}
name = @name
name.except!(:a)
当我打印 @name 时, :a 键值对已被删除。如果是这样,任何其他方法来防止这种情况。即复制实例变量而不引用。
【问题讨论】:
-
Ruby 是按值传递/复制。但在复杂对象的情况下,原始值及其副本是对其他地方对象的引用。
-
经验法则是从不使用变异方法。
-
@AlekseiMatiushkin:出于性能原因,有时您必须这样做。但是,是的,这是一个很好的默认规则
-
@SergioTulentsev 不和你在一起,为什么?一般。
-
顺便说一句,
Hash#except!是否有效 ruby?什么版本?
标签: ruby activesupport