【发布时间】:2018-02-18 06:46:49
【问题描述】:
我正在查看 Michael Hartl 的 rails tutorial,并发现他定义了一个虚拟属性 remember_token,然后在 remember 实例方法中为其赋值:
class User < ApplicationRecord
attr_accessor :remember_token
...
def remember
self.remember_token = User.new_token
update_attribute(:remember_digest, User.digest(remember_token))
end
end
然后在调用remember 之后,他在辅助方法中访问虚拟属性的值:
def remember(user)
user.remember
cookies.permanent.signed[:user_id] = user.id
cookies.permanent[:remember_token] = user.remember_token
end
我的解释是,在执行 remember 方法之后(并且在分配了 remember_token 的位置,它会从内存中删除。显然这里不是这种情况,因为在为 @987654329 分配新值时仍然可以使用它@。
我想我的困惑源于数据持久性。假设remember_token在attr_accessor的帮助下变成了一个实例变量,那么它什么时候正式变得不可用?
【问题讨论】:
-
当对象消失时。实例方法永远不会“变得不可用”,它们是定义它们的对象的一部分。
-
对不起。可能不是 实例方法 本身,而是实例方法产生的值。
-
这些值像任何其他值一样被垃圾收集。只要有对它们的引用,它们就不会被删除。
标签: ruby-on-rails ruby memory-management computed-properties virtual-attribute