假设我们有课
class Evaluator
attr_reader :response
def initialize(response)
@response = response
end
def order
@_order ||= Order.find(response.order_id)
end
end
我想询问@_order
仅用于缓存目的。此约定用于防止意外使用实例变量(例如,当它尚未初始化时)。我想强制使用order
代替@order
。你怎么看待这件事?你知道更好的方法来实现这个目标吗?
答案 0 :(得分:0)
在Ruby中,不能使子类无法访问实例变量。默认情况下,实例变量是 protected (在通用编程术语中),这意味着它们不能从类外部访问,但可以从类层次结构中访问。
您只能使用private
,protected
和public
来控制方法的可访问性。
答案 1 :(得分:0)
你可以非常明显地表示,不应该使用该成员,例如调用它@lazy_loaded_order
,或者甚至将其概括为:
def order
@lazy_members[:order] ||= Order.find(response.order_id)
end
这样一来,显然任何试图使用@lazy_members
的人都会自行承担风险......