Sorbet спрашивает `sig` для` attr_reader` - PullRequest
3 голосов
/ 19 июня 2019

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

Ответы [ 2 ]

5 голосов
/ 20 июня 2019

Ошибка не связана с самим методом attr_reader, которому требуется sig, а с :collection_name. Подпись для attr_reader уже известна, но новый метод, который она динамически создает, #collection_name не имеет известного sig, и Сорбет ожидает, что это место, где вы ее дадите.

Вы можете сделать это, чтобы исправить это:

sig { returns(String) }
attr_reader(:collection_name)
0 голосов
/ 19 июня 2019

attr_reader(attribute) эквивалентно:

def attribute
  @attribute
end

Возможно, именно поэтому Сорбет просит подписи.

...