要编写泛型方法,我只在 sorbet.run 上找到了这个示例。
sorbet.org/docs目前没有提及type_parameter
。所以我有几个关于T.type_parameter
.
- 限制父类型
如何指定只允许某种类型的子类型?(对于泛型类也一样,使用type_member
) 例如,只允许“Enumerable”类型,所以我可以在该对象上调用“Enumerable”中的所有内容。
- 工厂方法
我有一个实例化给定类的对象的方法。(例如,因为它正在使用应保密的参数)。我怎样才能为此写签名?
#typed: true
class Animal
def initialize(secret_of_nature); end
end
class Sidewinder < Animal
def rattle; end
end
class Nature
extend T::Sig
sig {params(animal_cls: T.class_of(Animal)).returns(Animal)}
def self.factory(animal_cls)
animal_cls.new(@secret_dna)
end
end
Nature::factory(Sidewinder).rattle
# => Method rattle does not exist on Animal