destructuring
Destructuring allows the specification of several values at once, when their
value is extracted from a Tuple
or Entry
.
Usage
// destructure an Entry
value key->item = entry;
[Float, Float, Float] point = [1.0, 1.0, 1.0];
// declare three values extracting the valee of each from the tuple
value [x, y, z] = point;
[Float, Float, Float]? maybePoint = point;
// in conjunction with the exists condition
if (exists [x, y, z] = maybePoint) {
// ...
}
[Float+] floats = [0.0, 1.0, 2.0, 3.0];
// destructure with spread
value [first, *rest] = floats;
[Float, Float, [String, Icon]] labelledPoint = ...;
// nested destructure
value [x, y, [name, icon]] = labelledPoint;
Description
Destructuring specification is supported:
- In
value
declarations (value [x, y] = point
), - In
for
iteration variables (for ([x, y] in points) { ... }
), - In condition lists (
if (exists [x, y]=maybePoint) { ... }
,assert(exists [x, y]=maybePoint);
,assert(nonempty [first, *rest]=seq);
etc), - In
cases
of aswitch
(case ([Float x, Float y]) { ... }
), - In
let
expressions (let ([x, y] = point) sqrt(x^2+y^2)
), - In comprehensions (
{ for[x, y] in points) sqrt(x^2+y^2) }
),
It is not supported for types other than Tuple
or Entry
.