Skip to content

Latest commit

 

History

History
104 lines (78 loc) · 2.33 KB

File metadata and controls

104 lines (78 loc) · 2.33 KB
titledescriptioncanonical
Tuple
Tuple types and values in ReScript
/docs/manual/v11.0.0/tuple

Tuple

Tuples are a ReScript-specific data structure that don't exist in JavaScript. They are:

  • immutable
  • ordered
  • fix-sized at creation time
  • heterogeneous (can contain different types of values)

<CodeTab labels={["ReScript", "JS Output"]}>

letageAndName= (24, "Lil' ReScript") letmy3dCoordinates= (20.0, 30.5, 100.0)
varageAndName=[24,"Lil' ReScript"];varmy3dCoordinates=[20.0,30.5,100.0];

Tuples' types can be used in type annotations as well. Tuple types visually resemble tuples values.

<CodeTab labels={["ReScript", "JS Output"]}>

letageAndName: (int, string) = (24, "Lil' ReScript") // a tuple type aliastypecoord3d= (float, float, float) letmy3dCoordinates: coord3d= (20.0, 30.5, 100.0)
varageAndName=[24,"Lil' ReScript"];varmy3dCoordinates=[20.0,30.5,100.0];

Note: there's no tuple of size 1. You'd just use the value itself.

Usage

To get a specific member of a tuple, destructure it:

<CodeTab labels={["ReScript", "JS Output"]}>

let (_, y, _) =my3dCoordinates// now you've retrieved y
vary=30.5;

The _ means you're ignoring the indicated members of the tuple.

Tuples aren't meant to be updated mutatively. You'd create new ones by destructuring the old ones:

<CodeTab labels={["ReScript", "JS Output"]}>

letcoordinates1= (10, 20, 30) let (c1x, _, _) =coordinates1letcoordinates2= (c1x+50, 20, 30)
varcoordinates1=[10,20,30];varc1x=10;varcoordinates2=[60,20,30];

Tips & Tricks

You'd use tuples in handy situations that pass around multiple values without too much ceremony. For example, to return many values:

<CodeTab labels={["ReScript", "JS Output"]}>

letgetCenterCoordinates= () => { letx=doSomeOperationsHere() lety=doSomeMoreOperationsHere() (x, y) }
functiongetCenterCoordinates(param){varx=doSomeOperationsHere(undefined);vary=doSomeMoreOperationsHere(undefined);return[x,y];}

Try to keep the usage of tuple local. For data structures that are long-living and passed around often, prefer a record, which has named fields.

close