Exemple
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
Cas
- Objectif
- 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
- Paquets
- sorbet-runtime 0.6.13427
- Environnement
- ruby
- Créé
- 2026-08-16T17:10:55Z
Ce que l'on suppose souvent
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.
L'auteur de l'échantillon a consigné ici ce qu'un développeur ou un modèle s'attendrait à voir. Le contrat ci-dessous est ce qui s'est réellement exécuté.
Contrat
- 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.
Fichiers
- Gemfile
- Gemfile.lock
- NOTES.md
- csx.json
- test/contract.rb
Télécharger l'artefact vérifié (tar.gz) — les octets exacts sur lesquels le contrat s'est exécuté
Seeder d'origine
Reçus de vérification
- ruby 3 · CONTAINER_RUN · compile:SKIPPED · contract:PASS · load:PASS · resolve:PASS · rubygems@1 · 2026-08-16 · ed25519:d91480838ac982c9