让我们考虑以下示例:
class Car < ActiveRecord::Base
def engine
@engine ||= Engine.new(self)
end
end
class Engine
def initialize(vehicle)
@vehicle = vehicle
end
def model
@vehicle.model
end
end
而我不明白的是,当我去控制台并做类似的事情时:
car = Car.last
car.engine.model # => 'V8'
然后
car.model = 'V6'
我得到了
car.engine.model # => 'V6'
这显然是一个简化的例子,但无论如何,任何人都可以解释为什么我在最后一行代码中获得了不同的引擎型号名称?是不是应该使用@engine变量并返回以前的引擎型号名称?
答案 0 :(得分:1)
这里不足为奇。您使用Engine
对象初始化car
实例,因此@vehicle
实例变量引用与car
局部变量相同的对象。难怪如果修改car
对象,@engine
对象将以相同的方式进行修改。