Ruby 将Sorbet类型签名添加到具有多个变量的attr_reader/attr_writer

Ruby 将Sorbet类型签名添加到具有多个变量的attr_reader/attr_writer,ruby,sorbet,Ruby,Sorbet,我有一个attr\u reader,它提供了多个变量,如下所示: attr\u阅读器:用户,:系列 我想给它添加一个类型签名,但Sorbet不支持多个返回类型 sig{返回(用户,序列)} 属性读取器:用户,:系列 这样把他们分开是唯一的选择吗 sig{返回(用户)} 属性读取器:用户 sig{returns(Series)} 属性读取器:系列 是的,唯一的选择是分割属性声明,就像为它们定义单独的getter/setter方法一样,除非所有属性都是同一类型 这是因为Sorbet在其操作的DS

我有一个
attr\u reader
,它提供了多个变量,如下所示:

attr\u阅读器:用户,:系列
我想给它添加一个类型签名,但Sorbet不支持多个返回类型

sig{返回(用户,序列)}
属性读取器:用户,:系列
这样把他们分开是唯一的选择吗

sig{返回(用户)}
属性读取器:用户
sig{returns(Series)}
属性读取器:系列

是的,唯一的选择是分割属性声明,就像为它们定义单独的getter/setter方法一样,除非所有属性都是同一类型

这是因为Sorbet在其操作的DSL阶段实际上在
attr\u读取器
/
attr\u编写器
/
attr\u访问器
声明上使用
sig
对这些声明生成的合成方法进行定义。因此,
attr\u读取器
的单个getter、
attr\u writer
的单个setter和
attr\u访问器
的getter/setter对被综合生成,并对其应用
sig
s

因此:

但这不会是:

sig { returns(String, User) }
attr_reader :some_string_attr, :some_user_attr

我想你除了分手别无选择。知道哪个属性返回什么类型的值也会更好一些,因为类型列表和属性列表并不总是完全对齐的。
sig { returns(String, User) }
attr_reader :some_string_attr, :some_user_attr