Estaba mirando la lista de errores de tiempo de ejecución de Sorbet de los documentos . Me parece que "Errores de procesos de firma no válidos" y "Errores de firmas no válidas" serían detectados por el verificador de tipo Sorbet. Si su código pasa las comprobaciones estáticas de Sorbet, ¿está garantizado que esos errores de tiempo de ejecución nunca ocurrirán?
Hay casos en los que pasan las comprobaciones estáticas, pero obtendrá un error de tiempo de ejecución. Considera lo siguiente:
# typed: strict class A extend T::Sig sig {returns(Integer)} def foo; 0; end end class B < A sig {returns(String)} def foo; '0'; end end B.new.fooEjecutar esto terminará en:
RuntimeError: Incompatible return type in signature for override of method `foo` Puede evitar caer en esto asegurándose de usar overridable o (:final) ( docs ) en sus firmas cuando corresponda.
class A extend T::Sig sig {overridable.returns(Integer)} def foo; 0; end sig (:final) {returns(Integer)} def bar; 0; end end class B < A sig {returns(String)} # this will fail static check, as it doesn't declare `override` def foo; '0'; end sig {returns(String)} # this will fail static check, as `bar` is `final` def bar; '0'; end end