如何在使用 sorbet 的项目中包含 Enumerable?
How do I include Enumerable in a project using sorbet?
如果我定义一个可枚举的class like
# 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
声明更改为(即它的定义方式 in the 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
如何在项目中使用 sorbet 实现 Enumerable
class,以便在 运行 宁 srb rbi update
时既能进行类型检查又不会出错?
这看起来像是 Sorbet 中的错误。我不知道解决方法。请在 https://github.com/sorbet/sorbet 提交问题。不幸的是,我们的资源有限,因此必须决定如何确定优先级。
如果我定义一个可枚举的class like
# 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
声明更改为(即它的定义方式 in the 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
如何在项目中使用 sorbet 实现 Enumerable
class,以便在 运行 宁 srb rbi update
时既能进行类型检查又不会出错?
这看起来像是 Sorbet 中的错误。我不知道解决方法。请在 https://github.com/sorbet/sorbet 提交问题。不幸的是,我们的资源有限,因此必须决定如何确定优先级。