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
Ring[size: Int]declara el parámetro en el encabezado del struct.- Dentro del cuerpo siempre se escribe
Self.size;sizea secas es error. Ring[4]()estampa un anillo de cuatro ranuras, yputenvuelve el índice con%.
Palabras clave y builtins usados aquí
CopyableIntListMovabledefforprintrangereturnselfstructvar
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.
Paso 3 de 5 en Mojo en tiempo de compilación; paso 3 de 22 en Parámetros y SIMD.