typestar

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

  1. Named y Weighed piden un solo método cada uno.
  2. Crate lista los dos traits en su encabezado e implementa el par.
  3. manifest[T: Named & Weighed] puede entonces llamar name() y kilograms() sobre item.

Palabras clave y builtins usados aquí

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.

Escribe este fragmento

Paso 4 de 5 en Traits; paso 19 de 22 en Structs y traits.

← Anterior Siguiente →