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)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
答案 0 :(得分:5)
该错误与attr_reader
方法本身不需要sig
有关,而与:collection_name
有关。 attr_reader
的签名是已知的,但是它动态创建的新方法#collection_name
没有已知的sig
,Sorbet希望这是您为其签名的地方。
您可以通过以下方法进行修复:
sig { returns(String) }
attr_reader(:collection_name)
答案 1 :(得分:0)
def attribute
@attribute
end
等效于:
string = "entity precision recall f1-score support B-EXPERIENCE 0.578 0.488 0.529 244 I-EXPERIENCE 0.648 0.799 0.716 399 L-EXPERIENCE 0.850 0.697 0.766 244 U-EXPERIENCE 0.000 0.000 0.000 9 B-LANGUAGE 0.000 0.000 0.000 1 I-LANGUAGE 0.000 0.000 0.000 1 L-LANGUAGE 0.000 0.000 0.000 1 U-LANGUAGE 0.788 0.904 0.842 292 B-PROGRAMMING 0.480 0.433 0.455 141 I-PROGRAMMING 0.524 0.328 0.404 67 L-PROGRAMMING 0.261 0.255 0.258 141 U-PROGRAMMING 0.904 0.825 0.862 2010 micro_avg 0.785 0.746 0.765 3550 macro_avg 0.419 0.394 0.403 3550 weighted_avg 0.787 0.746 0.763 3550"
这可能就是Sorbet要求信号的原因。