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

Ruby中如何无需实例化直接调用.call方法?

在Ruby服务对象中实现类级别的.call方法

要实现直接用Product.call(my_args)调用服务,核心是给类添加类方法self.call,下面是两种常用实现方式:

方式一:类方法内部复用实例逻辑(推荐)

这种方式既保留原有的实例调用方式,又新增类调用入口,兼容旧代码,适合逻辑复杂需要拆分的服务对象:

class Product
  def initialize(args)
    @args = args # 初始化实例变量,供实例方法使用
  end

  def call
    # 这里写具体的业务逻辑
    puts "处理产品参数: #{@args[:name]}"
    # 比如执行数据库操作、计算逻辑等
  end

  # 新增类级别的call方法
  def self.call(args)
    new(args).call # 内部自动实例化并调用实例的call方法
  end
end

调用方式:

# 新的类调用方式
Product.call(name: "Ruby入门指南")

# 原有的实例调用方式依然有效
Product.new(name: "Ruby入门指南").call

方式二:直接在类方法中写逻辑(适合简单场景)

如果服务逻辑很简单,不需要实例变量拆分,可以直接把逻辑写在类方法里,省去实例化步骤:

class Product
  def self.call(args)
    # 直接在这里编写业务逻辑
    puts "处理产品参数: #{args[:name]}"
  end
end

调用方式:

Product.call(name: "Ruby入门指南")

这种写法更简洁,但如果后续逻辑变复杂,建议改用方式一来维护代码的可读性。

内容的提问来源于stack exchange,提问作者Thiago Lima

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 00:43:16