1

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

1 回答 1

1

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

这样做的原因是 Sorbet 在其操作的 DSL 阶段实际上使用sigon an attr_reader//声明来定义由这些声明产生的综合方法attr_writer。因此,一个单一的 getter for ,一个单一的 setter for和一个 getter/setter 对被综合生成,并将s 应用于它们。attr_accessorsigattr_readerattr_writerattr_accessorsig

因此,这将是有效的:

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

但这不会是:

sig { returns(String, User) }
attr_reader :some_string_attr, :some_user_attr
于 2019-07-02T14:43:34.997 回答