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

如何封装Origen::Parameters的define_params方法以支持数组参数?

如何封装Origen::Parameters的define_params方法以支持数组参数?

嘿,这事儿不难!要让define_params支持一次性传入数组来批量配置多个测试项的分选规则,咱们可以通过扩展Origen的模块来实现,同时完全保留原方法的所有功能。

核心封装代码

我们需要重写Origen::Parameters模块里的define_params方法,让它能识别数组参数并遍历处理每个元素:

module Origen
  module Parameters
    def define_params(*args, &block)
      # 检查第一个参数是否为数组,是的话遍历每个元素单独处理
      if args.first.is_a?(Array)
        args.first.each do |param|
          # 调用原方法处理单个参数,保留其他参数和配置块
          super(param, *args[1..-1], &block)
        end
      else
        # 非数组参数直接调用原方法,完全兼容原有用法
        super(*args, &block)
      end
    end
  end
end

代码逻辑解释

  • 这个封装的核心是参数类型判断:如果传入的首个参数是数组,就循环数组里的每个测试项名称,逐个调用原生define_params方法执行配置块;如果是单个符号/字符串,就直接沿用原逻辑。
  • 用super调用原方法,完全保留define_params原本的所有功能,不会破坏任何现有代码的运行。
  • 额外的参数(如果有的话)也会被完整传递,确保方法的灵活性。

验证你的示例用法

因为你示例里的define_binning应该是基于define_params实现的,现在define_params支持数组后,你直接用数组传入就能批量配置了:

scan.define_binning [:ws1, :ws2] do |config|
  config.chain.softbin = 'bbxxx'
  config.chain.bin = 16
  config.logic.softbin = 'bbxxx'
  config.logic.bin = 5
end

这段代码会自动为ws1和ws2两个测试项分别执行配置块里的逻辑,一次性完成多个测试项的分选规则设置。

可选的严谨性优化

如果想避免传入无效参数(比如数组里混了非符号/字符串的元素),可以加个简单的校验:

module Origen
  module Parameters
    def define_params(*args, &block)
      if args.first.is_a?(Array)
        args.first.each do |param|
          unless param.is_a?(Symbol) || param.is_a?(String)
            raise ArgumentError, "测试项名称必须是符号或字符串,当前传入:#{param.inspect}"
          end
          super(param, *args[1..-1], &block)
        end
      else
        super(*args, &block)
      end
    end
  end
end

这样能提前拦截错误输入,让代码更健壮。

内容的提问来源于stack exchange,提问作者rchitect-of-info

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 04:00:49