Combinar trait bounds en Mojo
& une trait bounds y exige que un tipo los satisfaga todos.
trait Named:
def name(self) -> String:
...
trait Weighed:
def kilograms(self) -> Float64:
...
@fieldwise_init
struct Crate(ImplicitlyCopyable, Movable, Named, Weighed):
var label: String
var mass: Float64
def name(self) -> String:
return self.label
def kilograms(self) -> Float64:
return self.mass
def manifest[T: Named & Weighed](item: T) -> String:
return item.name() + " weighs " + String(item.kilograms())
def main():
print(manifest(Crate("bolts", 12.5)))
Cómo funciona
NamedyWeighedpiden un solo método cada uno.Cratelista los dos traits en su encabezado e implementa el par.manifest[T: Named & Weighed]puede entonces llamarname()ykilograms()sobreitem.
Palabras clave y builtins usados aquí
Float64MovableStringdefprintreturnselfstructtraitvar
El intento, en números
- Líneas
- 28
- Caracteres a escribir
- 469
- Tokens
- 124
- Ritmo de tres estrellas
- 70 tpm
Al ritmo de tres estrellas de 70 tokens por minuto, este intento toma unos 106 segundos.
Paso 4 de 5 en Traits; paso 19 de 22 en Structs y traits.