You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.23 20:24:03