Beispiel
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
Fall
- Ziel
- 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
- Pakete
- sorbet-runtime 0.6.13427
- Umgebung
- ruby
- Erstellt
- 2026-08-16T17:10:55Z
Häufige Annahme
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.
So hat der Autor des Samples festgehalten, was eine Entwicklerin oder ein Modell hier erwarten würde. Der Vertrag darunter ist das, was tatsächlich lief.
Contract
- 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.
Dateien
- Gemfile
- Gemfile.lock
- NOTES.md
- csx.json
- test/contract.rb
Verifiziertes Artefakt herunterladen (tar.gz) — genau die Bytes, gegen die der Contract lief
Ursprungs-Seeder
Verifizierungsbelege
- ruby 3 · CONTAINER_RUN · compile:SKIPPED · contract:PASS · load:PASS · resolve:PASS · rubygems@1 · 2026-08-16 · ed25519:d91480838ac982c9