果汁冰糕要求`sig`作为`attr_reader`

Utk*_*mte 5 ruby sorbet

Sorbet正在显示attr_reader的错误,但是请纠正我,如果我错了,则在声明该函数(而不是调用该函数)时需要sig,对吗?

我已经尝试过文档,但我得到的只是这份笔记

注意:许多看起来像局部变量的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)
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Run Code Online (Sandbox Code Playgroud)

jar*_*ith 6

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

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

sig { returns(String) }
attr_reader(:collection_name)
Run Code Online (Sandbox Code Playgroud)


小智 1

attr_reader(attribute)相当于:

def attribute
  @attribute
end
Run Code Online (Sandbox Code Playgroud)

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