typestar

Structs paramétricos en Mojo

Un parámetro de struct fija un tamaño en compilación, y así no sobrevive ningún chequeo.

struct Ring[size: Int](Copyable, Movable):
    var slots: List[Int]

    def __init__(out self):
        self.slots = List[Int](capacity=Self.size)
        for _ in range(Self.size):
            self.slots.append(0)

    def put(mut self, index: Int, value: Int):
        self.slots[index % Self.size] = value

    def room(self) -> Int:
        return Self.size


def main():
    var ring = Ring[4]()
    ring.put(6, 99)
    print(ring.room(), ring.slots[2])

Cómo funciona

  1. Ring[size: Int] declara el parámetro en el encabezado del struct.
  2. Dentro del cuerpo siempre se escribe Self.size; size a secas es error.
  3. Ring[4]() estampa un anillo de cuatro ranuras, y put envuelve el índice con %.

Palabras clave y builtins usados aquí

El intento, en números

Líneas
19
Caracteres a escribir
387
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 3 de 5 en Mojo en tiempo de compilación; paso 3 de 22 en Parámetros y SIMD.

← Anterior Siguiente →