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
Pricedexige un métodopriceque devuelva unFloat64.with_tax[T: Priced](item: T)acepta cualquier tipo que conforme.- Pasar un
Bookestampa una versión especializada, sin despacho dinámico.
Palabras clave y builtins usados aquí
Float64Movabledefprintreturnselfstructtraitvar
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.
Paso 3 de 5 en Traits; paso 18 de 22 en Structs y traits.