typestar

Funciones genéricas sobre traits en Mojo

Un trait bound deja que una función sirva a todo tipo conforme, compilada de nuevo para cada uno.

trait Priced:
    def price(self) -> Float64:
        ...


@fieldwise_init
struct Book(ImplicitlyCopyable, Movable, Priced):
    var cost: Float64

    def price(self) -> Float64:
        return self.cost


def with_tax[T: Priced](item: T) -> Float64:
    return item.price() * 1.0825


def main():
    print(with_tax(Book(20.0)))

Cómo funciona

  1. Priced exige un método price que devuelva un Float64.
  2. with_tax[T: Priced](item: T) acepta cualquier tipo que conforme.
  3. Pasar un Book estampa una versión especializada, sin despacho dinámico.

Palabras clave y builtins usados aquí

El intento, en números

Líneas
19
Caracteres a escribir
295
Tokens
75
Ritmo de tres estrellas
75 tpm

Al ritmo de tres estrellas de 75 tokens por minuto, este intento toma unos 60 segundos.

Escribe este fragmento

Paso 3 de 5 en Traits; paso 18 de 22 en Structs y traits.

← Anterior Siguiente →