Sorbet泛型问题:带类型变量参数的方法无法接收Foo[Integer]实例?
问题原因
你当前的报错来源于方法泛型参数没有正确绑定:你为blah定义了方法级泛型参数:MyParam,但调用时Sorbet无法自动将入参的Foo[Integer]与泛型参数做关联,所以触发了类型不匹配错误。
解决方案
Sorbet完全支持这种泛型类作为方法参数的使用场景,不需要开发者手动做单态化,所有泛型的特化逻辑会在静态检查阶段自动完成,你可以选择以下任意一种方式修复问题:
- 方案1:调用泛型方法时显式指定泛型参数
Sorbet支持调用泛型方法时通过.[]语法显式传递类型参数,直接把调用代码改为以下形式即可通过检查:blah.[Integer](T.cast(my_foo, Foo[Integer])) - 方案2:固定方法参数类型
如果你的blah方法只需要接收Foo[Integer]类型的参数,直接简化方法签名,移除方法级泛型定义即可:
调整后原调用代码不需要做任何修改即可通过类型检查。sig { params(foo: Foo[Integer]).void } def blah(foo) end
内容的提问来源于stack exchange,提问作者user541020
相关产品推荐
相关产品推荐

