在Sorbet中能否将对象返回类型用作其他对象的参数/变量类型?
在Sorbet中复用方法返回类型作为变量类型注解的方案
可以实现复用CSV.parse的返回类型,不用手动复制冗长的T.any(CSV::Table, T::Array[T::Array[T.untyped]])类型注解,以下是几种可行的方式:
1. 直接使用T.type_of获取方法返回类型
通过T.type_of(CSV.parse(T.anything))可以直接拿到CSV.parse的返回类型,其中T.anything是Sorbet提供的万能占位符,仅用于推导方法的类型签名,不需要传入实际有效参数:
csv_text = T.let(File.read(csv_address), String) @csv = T.let(CSV.parse(csv_text), T.type_of(CSV.parse(T.anything)))
2. 定义类型别名复用
如果这个返回类型需要在多处使用,可以提前定义一个类型别名,后续直接引用即可:
# 定义类型别名,复用CSV.parse的返回类型 CSVParseResult = T.type_of(CSV.parse(T.anything)) # 实际使用 csv_text = T.let(File.read(csv_address), String) @csv = T.let(CSV.parse(csv_text), CSVParseResult)
注意事项
- 你示例中写的
CSV.parse.return_sig不是Sorbet支持的语法,无法直接通过这种方式获取方法的返回签名,必须借助T.type_of来实现。 - 对于局部变量,Sorbet通常可以自动推断类型,但实例变量(如
@csv)因为作用域特性,需要显式通过T.let标注类型,上述方法正好解决了手动复制类型的繁琐问题。
内容的提问来源于stack exchange,提问作者Peter Nixey
相关产品推荐
相关产品推荐

