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_成员的人都会自担风险