使用多个变量将Sorbet类型签名添加到attr_reader / attr_writer

时间:2019-07-02 02:30:59

标签: ruby sorbet

我有一个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

1 个答案:

答案 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>

因此,this would be valid

sig { returns(String) }
attr_reader :some_string_attr, :other_string_attr

但这不是:

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