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方法 终止 终止