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)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
该错误与需要sig
的attr_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
这可能就是索贝要求签名的原因。