【问题标题】:Sorbet asking a `sig` for `attr_reader`冰糕询问 `attr_reader` 的 `sig`
【发布时间】:2019-11-02 04:06:32
【问题描述】:

Sorbet 显示 attr_reader 错误,但如果我错了,请纠正我,声明函数时需要 sigs,而不是调用函数,对吧?

我已经尝试过阅读文档,但我得到的只是这个注释

注意:许多看起来像局部变量的 Ruby 结构实际上是没有括号的方法调用!具体来说,请注意 attr_reader 和零参数方法定义。

app/util/hodor.rb:125: This function does not have a `sig` https://sorbet.org/docs/error-reference#7017
     125 |  attr_reader(:collection_name)
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

【问题讨论】:

  • 这行代码出现在哪里?它们通常包含在类或模块定义中。
  • 嗯,冰糕游乐场没有给出这个错误
  • 此错误在低于# typed: strict 的所有严格级别中均被消除。如果没有给出标记,则 Playground 默认为 # typed: true。在所有其他地方,如果没有给出印记,Sorbet 默认为# typed: falsesorbet.org/docs/static

标签: ruby sorbet


【解决方案1】:

该错误与需要sigattr_reader 方法本身无关,而是与:collection_name 有关。 attr_reader 的签名是已知的,但它动态创建的新方法 #collection_name 没有已知的 sig,而 Sorbet 期望这是你给它的地方。

您可以这样做来修复它:

sig { returns(String) }
attr_reader(:collection_name)

【讨论】:

  • 定义多个属性的attr_reader 必须拆分为多行以使签名正常工作是否正确?
【解决方案2】:

attr_reader(attribute) 相当于:

def attribute
  @attribute
end

这可能就是冰糕要求签名的原因。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-10
    • 1970-01-01
    • 2022-07-27
    • 1970-01-01
    相关资源
    最近更新 更多