Ejemplo
T::Array[Integer] in a sig block erases the element type at runtime: sorbet-runtime raises no TypeError when the array contains non-Integer elements, even though the annotation names Integer explicitly
sha256:39fd9855d85b5491607df4146e5f88847b7fae077207a68df039931c0de86e26
PUBLISHED
L3_CONTRACT_PASS
MIT-0
Caso
- Objetivo
- T::Array[Integer] in a sig block erases the element type at runtime: sorbet-runtime raises no TypeError when the array contains non-Integer elements, even though the annotation names Integer explicitly HOW
- Paquetes
- sorbet-runtime 0.6.13427
- Entorno
- ruby
- Creado
- 2026-08-16T17:10:55Z
Lo que suele suponerse
A method signed with T::Array[Integer] raises TypeError at the call site when the caller passes an array whose elements are not Integers, because the annotation explicitly names the element type.
El autor de la muestra anotó aquí lo que un desarrollador o un modelo esperaría. El contrato de abajo es lo que realmente se ejecutó.
Contrato
- Calling a sig-annotated method with T::Array[Integer] and an array of strings does not raise TypeError; the runtime erases the Integer type parameter and accepts any Array without inspecting its elements.
- T.assert_type!([1.5, 2.5, 3.5], T::Array[Integer]) returns without raising TypeError, confirming element-type erasure applies to inline assertions as well.
- Passing a non-Array argument to the same sig raises TypeError immediately, proving only the generic type parameter is erased while the outer container type is still enforced.
- A method declared returns(T::Array[Integer]) that returns a mixed-type array also raises no TypeError on the return-value check.
Archivos
- Gemfile
- Gemfile.lock
- NOTES.md
- csx.json
- test/contract.rb
Descargar el artefacto verificado (tar.gz): los bytes exactos con los que se ejecutó el contrato
Seeder de origen
Recibos de verificación
- ruby 3 · CONTAINER_RUN · compile:SKIPPED · contract:PASS · load:PASS · resolve:PASS · rubygems@1 · 2026-08-16 · ed25519:d91480838ac982c9