冰糕要求“sig”为“attr_reader”

  • 本文关键字:reader attr sig ruby sorbet
  • 更新时间 :
  • 英文 :


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)
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

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

您可以执行此操作来修复它:

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

这是关于它的 Sorbet 文档:

它是这样的:

# typed: true
class A
  extend T::Sig
  sig {returns(Integer)}
  attr_reader :reader
  sig {params(writer: Integer).returns(Integer)}
  attr_writer :writer
  # For attr_accessor, write the sig for the reader portion.
  # (Sorbet will use that to write the sig for the writer portion.)
  sig {returns(Integer)}
  attr_accessor :accessor
  sig {void}
  def initialize
    @reader = T.let(0, Integer)
    @writer = T.let(0, Integer)
    @accessor = T.let(0, Integer)
  end
end

attr_reader(attribute)相当于:

def attribute
  @attribute
end

这可能就是索贝要求签名的原因。

最新更新