typestar

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

  1. items: []$T ata el tipo de elemento del slice a T por sitio de llamada.
  2. El cuerpo compara con >; cada instanciación lo verifica para su propio T.
  3. largest(ints) y largest(floats) compilan a dos procedimientos separados.

Palabras clave y builtins usados aquí

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.

Escribe este fragmento

Paso 2 de 3 en Tipos y genéricos; paso 20 de 27 en Fundamentos del lenguaje.

← Anterior Siguiente →