Ruby 如何实现类似attr_reader的类级check方法收集校验函数
实现方案
你可以通过Ruby的类实例变量+继承钩子实现这个需求,不会出现父子类校验规则共享的问题,完整可运行的代码如下:
class Base class << self # 每个类单独维护自己的校验方法列表 attr_accessor :check_methods # 类级别的check注册方法 def check(method_name) self.check_methods ||= [] self.check_methods << method_name end # 继承钩子:子类继承时自动复制父类的校验规则,不需要继承规则可以删掉这段 def inherited(subclass) subclass.check_methods = self.check_methods&.dup || [] end end def exec check_methods = self.class.check_methods || [] # 所有校验方法返回真值才执行后续逻辑 if check_methods.all? { |m| send(m) } # 这里放你的核心业务逻辑 puts "校验全部通过,执行核心逻辑" return true else puts "校验未通过,终止执行" return false end end end
使用测试
和你给出的调用方式完全兼容:
class SomeClass < Base check :check_1 check :check_2 def check_1 puts "运行check_1" true end def check_2 puts "运行check_2" true end end class Some2Class < Base check :check_3 check :check_4 def check_3 puts "运行check_3" false end def check_4 puts "运行check_4" true end end # 运行测试 SomeClass.new.exec # 输出: # 运行check_1 # 运行check_2 # 校验全部通过,执行核心逻辑 Some2Class.new.exec # 输出: # 运行check_3 # 校验未通过,终止执行
内容的提问来源于stack exchange,提问作者tai.groddy
相关产品推荐
相关产品推荐

