我有一个attr_reader
,它提供多个变量,就像这样:
attr_reader :user, :series
我想为其添加类型签名,但是Sorbet不支持多种返回类型,
sig { returns(User, Series) }
attr_reader :user, :series
像这样将它们分开的唯一选择吗?:
sig { returns(User) }
attr_reader :user
sig { returns(Series) }
attr_reader :series
答案 0 :(得分:1)
是的,唯一的选择是拆分属性声明,就像您要为它们定义单独的getter / setter方法时所做的那样,除非所有属性都属于同一类型。
这样做的原因是,Sorbet在其操作的DSL阶段实际上在sig
/ attr_reader
/ attr_writer
声明中使用attr_accessor
来定义sig
关于那些声明产生的综合方法。因此,将综合生成attr_reader
的单个getter,attr_writer
的单个setter和attr_accessor
的getter / setter对,并将sig
应用于它们。 / p>
sig { returns(String) }
attr_reader :some_string_attr, :other_string_attr
但这不是:
sig { returns(String, User) }
attr_reader :some_string_attr, :some_user_attr