Если я определяю перечислимый класс, такой как
# 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
?