【问题标题】:Adding Sorbet type signatures to attr_reader/attr_writer with multiple variables使用多个变量将 Sorbet 类型签名添加到 attr_reader/attr_writer
【发布时间】:2019-07-02 22:43:34
【问题描述】:

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

【问题讨论】:

  • 我觉得你除了分手别无选择。知道哪个属性返回什么样的值也会更好一些,因为类型列表和属性列表并不总是完全对齐。

标签: ruby sorbet


【解决方案1】:

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

原因是 Sorbet 在其操作的 DSL 阶段实际上使用了 attr_reader/attr_writer/attr_accessor 声明上的 sig 来定义合成方法上的 sig由这些声明产生。因此,attr_reader 的单个 getter、attr_writer 的单个 setter 和 attr_accessor 的 getter/setter 对是综合生成的,sigs 将应用于它们。

因此,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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-06-30
    • 1970-01-01
    • 2019-11-04
    • 1970-01-01
    • 1970-01-01
    • 2020-03-20
    • 1970-01-01
    相关资源
    最近更新 更多