如何在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
相关产品推荐
相关产品推荐

