Polimorfismo paramétrico en Odin
Un solo largest() para enteros y floats: $T recibe el tipo de elemento al compilar.
package main
import "core:fmt"
// $T takes the element type at compile time -- parametric polymorphism.
largest :: proc(items: []$T) -> T {
best := items[0]
for x in items[1:] {
if x > best do best = x
}
return best
}
main :: proc() {
ints := []int{3, 41, 12, 55}
floats := []f64{2.5, 8.75, 1.25}
fmt.println("largest int:", largest(ints))
fmt.println("largest float:", largest(floats))
}
Cómo funciona
items: []$Tata el tipo de elemento del slice aTpor sitio de llamada.- El cuerpo compara con
>; cada instanciación lo verifica para su propio T. largest(ints)ylargest(floats)compilan a dos procedimientos separados.
Palabras clave y builtins usados aquí
dof64forifimportinintpackageprocreturn
El intento, en números
- Líneas
- 19
- Caracteres a escribir
- 391
- Tokens
- 106
- Ritmo de tres estrellas
- 65 tpm
Al ritmo de tres estrellas de 65 tokens por minuto, este intento toma unos 98 segundos.
Paso 2 de 3 en Tipos y genéricos; paso 20 de 27 en Fundamentos del lenguaje.