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

如何在Sorbet中为静态方法使用泛型以返回动态类型?

泛型工厂类静态方法类型注解解决方案

要让ClientsFactory[SomeClass].build(:name)通过类型检查并返回正确的泛型类型,需在类级别绑定泛型参数,并为静态方法指定对应返回类型。以下是基于Ruby生态常用的Sorbet类型检查器的实现:

实现代码

# typed: strict
class ClientsFactory[T]
  # 静态build方法,返回泛型参数T的实例
  def self.build(name)
    new(name).build
  end

  def initialize(name)
    @name = name
  end

  # 实例build方法,返回T类型实例
  def build
    T.new(name: @name)
  end
end

# 示例业务类
class SomeClass
  attr_reader :name
  def initialize(name:)
    @name = name
  end
end

核心要点

  • 类声明ClientsFactory[T]明确告知类型检查器该类接受泛型参数T,静态方法self.build会自动关联此泛型参数,返回T类型实例。
  • 实例方法build同样关联泛型参数T,保证两种调用方式的类型一致性。

合法调用示例

两种调用方式均能通过类型检查:

# 链式调用
instance1 = ClientsFactory[SomeClass].new(:name).build
# 静态直接调用
instance2 = ClientsFactory[SomeClass].build(:name)

此方案可解决你遇到的「Call to method build on ClientsFactory[SomeClass] mistakes a type for a value」类型检查错误,让静态方法正确返回泛型指定的动态类型。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 15:13:17