索贝特(Sorbet)向sig询问“ attr_reader”

时间:2019-06-19 12:07:42

标签: 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)
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

2 个答案:

答案 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要求信号的原因。