Ruby 如何处理父(通过超级)和子方法调用的结果?

Ruby 如何处理父(通过超级)和子方法调用的结果?,ruby,Ruby,考虑一下这个笨拙的人为例子: class Notification def should_send? enrollment_status ? true : false end end class Sms < Notification attr_reader :enrollment_status def should_send? super(enrollment_status) # a method call dealing with logic

考虑一下这个笨拙的人为例子:

class Notification
  def should_send?
    enrollment_status ? true : false
  end
end

class Sms < Notification
  attr_reader :enrollment_status

  def should_send?
    super(enrollment_status)
    # a method call dealing with logic specific to text messages would go here
  end
end

class PhoneCall < Notification
  attr_reader :enrollment_status

  def should_send?
    super(enrollment_status)
    # a method call dealing with logic specific to phone call would go here
  end
end
这个示例将不起作用,但是,假设还有相当多的通知子类,如果user.unrolled,那么添加false并不是很枯燥?给每一个小班。但是,每个子类也将实现自己的自定义逻辑。一个重要的考虑因素是父通知检查需要取代子类中的自定义逻辑。换句话说,如果父方法调用返回true,则遵循子方法调用中的结果,如果父方法调用返回false,则无论自定义逻辑如何,原始子方法调用都应返回false

一些注意事项/问题:

我知道这个例子有一些怪癖,这很奇怪,但它相当代表了现有工作的局限性。 在子方法中执行逻辑之前,是否可能短路超方法调用并返回该结果? 我是否应该/可以在超级调用中将整个子级传递给父级,并在那里编写整个逻辑检查? 我的想法可能不正确,我把这一切都搞混了吗?是否有更好的方法来管理检查子级和父级结果?
要实现您的要求:

类通知 属性读取器:注册状态 您应该发送def吗? !!入学状况 终止 终止 类Sms<通知 您应该发送def吗? 超级和呼叫\u sms\u方法 终止 终止 类PhoneCall<通知 您应该发送def吗? 超级和呼叫\u电话\u方法 终止 终止