Ruby 防止意外调用实例变量的约定
假设我们有课Ruby 防止意外调用实例变量的约定,ruby,Ruby,假设我们有课 class Evaluator attr_reader :response def initialize(response) @response = response end def order @_order ||= Order.find(response.order_id) end end 我想问一下@\u order,它只用于缓存目的。此约定用于防止意外使用实例变量(例如,当尚未初始化时)。我想强制使用order而不是@order。你
class Evaluator
attr_reader :response
def initialize(response)
@response = response
end
def order
@_order ||= Order.find(response.order_id)
end
end
我想问一下
@\u order
,它只用于缓存目的。此约定用于防止意外使用实例变量(例如,当尚未初始化时)。我想强制使用order
而不是@order
。你觉得怎么样?您知道实现这一目标的更好方法吗?在Ruby中,您不能使子类无法访问实例变量。默认情况下,实例变量是受保护的(在通用编程术语中),这意味着它们不能从类外部访问,但可以从类层次结构内部访问
您只能通过使用
private
、protected
和public
来控制方法的可访问性。您可以痛苦地告诉我们,不应该使用成员,比如将其称为@lazy\u loaded\u order
,甚至可以这样概括:
def order
@lazy_members[:order] ||= Order.find(response.order_id)
end
这样,很明显,任何试图使用@lazy_成员的人都会自担风险