Desestructuración

para Zig 0.15.2 Comprar

Desestructuración

Un punto interesante del ejemplo es la desestructuración del resultado. Esta desestructuración se puede hacer sin la necesidad de que provenga de una función, siempre que se lleve a cabo sobre: tuplas, arrays y vectores. Los vectores son un tipo que veremos más adelante.

Podríamos usar una tupla (un struct anónimo es una tupla) en vez del array para devolver múltiples datos - es muy útil cuando esos datos son de distintos tipos:

  // devolverá una tupla

  fn lift_water(self: *const HydroTower, n_input: f32) struct { f32, u8 } {

  //...

  // desestructuramos la tupla devuelta

  const f_water, const n_height = o_tower

      .lift_water(o_river.n_liters_per_second);

  // o recuperamos la tupla para desestructurarla o usarla después

  const t_resp = o_tower.lift_water(o_river.n_liters_per_second);

  // desestructurar

  const f_water, const n_height = t_resp;

  // usar directamente los valores por índice

  t_resp[0], t_resp[1]

También podemos usar un struct anónimo con campos nombrados, pero no lo podremos desestructurar:

  // devolverá un struct anónimo con campos nombrados

  fn lift_water(self: *const HydroTower, n_input: f32)

     struct { f_water: f32, n_height: u8 } {

  //...

  // no podemos desestructurar el struct con campos nombrados

  const o_output = o_tower

      .lift_water(o_river.n_liters_per_second);

  // en este caso accedemos los valores por nombre

  print("{}L a {}m  \n", .{ o_output.f_water, o_output.n_height });

Porque aunque toda tupla sea un struct anónimo, no todos los struct anónimos son tuplas. Si usamos los campos nombrados ya no es una tupla.

Devolver multiples valores
Valores opcionales
© 2025 - 2026 Zen of Zig