在另一页看到这个:
“使用 getter,无需修改即可获得 @a 的当前值。”
“使用setter,修改@a,并将其新值作为返回值。”
但是,从cancan wiki查看这段代码,我发现 setter 和 getter 实际上都在对其中的变量做一些事情。
def roles=(roles)
self.roles_mask = (roles & ROLES).map { |r| 2**ROLES.index(r) }.inject(0, :+)
end
def roles
ROLES.reject do |r|
((roles_mask || 0) & 2**ROLES.index(r)).zero?
end
end
看起来 getter 实际上正在返回一个真值,如果不是这样,至少是某种转换。那么这个“getter get without modifying, setter set with modified”规则真的是真的吗?