Как включить Enumerable в проект с использованием сорбета? - PullRequest
0 голосов
/ 05 февраля 2020

Если я определяю перечислимый класс, такой как

# typed: strict

class MyEnumerable
  extend T::Generic
  extend T::Sig
  include Enumerable

  Elem = type_member

  sig {override.params(blk: T.proc.params(arg: Elem).returns(BasicObject)).returns(NilClass)}
  def each(&blk)
  end
end

Этот тип проверяет с srb tc очень хорошо, но если я пытаюсь запустить srb rbi update, я получаю ошибку. Проверка reflection.json.err

reflection.rbi:15619: Type variable `Elem` needs to be declared as `= type_member(SOMETHING)` https://srb.help/5018
       15619 |  Elem = ::T.let(nil, ::T.untyped)
                ^^^^

Изменение объявления Elem на (т. Е. Как оно определено в Enumerable rbi )

    Elem = type_member(:out)

сейчас srb tc выдает мне ошибку

Classes can only have invariant type members https://srb.help/5016
     9 |    Elem = type_member(:out)
            ^^^^^^^^^^^^^^^^^^^^^^^^
Errors: 1

при изменении объявления Elem на

    Elem = type_member(:invariant)

сейчас srb tc выдает ошибку

Invalid variance kind, only :out and :in are supported https://srb.help/4011
     9 |    Elem = type_member(:invariant)
                               ^^^^^^^^^^
Errors: 1

Как могу ли я реализовать класс Enumerable в проекте с использованием сорбета, чтобы он одновременно проверял тип и не выдавал ошибку при запуске srb rbi update?

1 Ответ

0 голосов
/ 05 февраля 2020

Это похоже на ошибку в Сорбете. Я не знаю обходного пути. Пожалуйста, отправьте вопрос на https://github.com/sorbet/sorbet. К сожалению, у нас ограниченные ресурсы, и поэтому нам придется принять решение о том, как расставить приоритеты.

...