Skip to content

Commit 31f2ad6

Browse files
committed
Finish previous PR with examples
1 parent 37f56b9 commit 31f2ad6

File tree

1 file changed

+86
-0
lines changed

1 file changed

+86
-0
lines changed

pages/docs/manual/latest/pattern-matching-destructuring.mdx

Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -527,6 +527,92 @@ if (exit === 1) {
527527

528528
</CodeTab>
529529

530+
### Match on Array
531+
532+
<CodeTab labels={["ReScript", "JS Output"]}>
533+
534+
```res example
535+
let students = ["Jane", "Harvey", "Patrick"]
536+
switch students {
537+
| [] => Js.log("There are no students")
538+
| [student1] =>
539+
Js.log("There's a single student here: " ++ student1)
540+
| manyStudents =>
541+
// display the array of names
542+
Js.log2("The students are: ", manyStudents)
543+
}
544+
```
545+
```js
546+
var students = ["Jane", "Harvey", "Patrick"];
547+
548+
var len = students.length;
549+
550+
if (len !== 1) {
551+
if (len !== 0) {
552+
console.log("The students are: ", students);
553+
} else {
554+
console.log("There are no students");
555+
}
556+
} else {
557+
var student1 = students[0];
558+
console.log("There's a single student here: " + student1);
559+
}
560+
```
561+
562+
</CodeTab>
563+
564+
### Match on List
565+
566+
Pattern matching on list is similar to array, but with the extra feature of extracting the tail of a list (all elements except the first one):
567+
568+
<CodeTab labels={["ReScript", "JS Output"]}>
569+
570+
```res example
571+
let rec printStudents = (students) => {
572+
switch students {
573+
| list{} => () // done
574+
| list{student} => Js.log("Last student: " ++ student)
575+
| list{student1, ...otherStudents} =>
576+
Js.log(student1)
577+
printStudents(otherStudents)
578+
}
579+
}
580+
printStudents(list{"Jane", "Harvey", "Patrick"})
581+
```
582+
```js
583+
function printStudents(_students) {
584+
while(true) {
585+
var students = _students;
586+
if (!students) {
587+
return;
588+
}
589+
var otherStudents = students.tl;
590+
var student = students.hd;
591+
if (otherStudents) {
592+
console.log(student);
593+
_students = otherStudents;
594+
continue;
595+
}
596+
console.log("Last student: " + student);
597+
return;
598+
};
599+
}
600+
601+
printStudents({
602+
hd: "Jane",
603+
tl: {
604+
hd: "Harvey",
605+
tl: {
606+
hd: "Patrick",
607+
tl: /* [] */0
608+
}
609+
}
610+
});
611+
```
612+
613+
</CodeTab>
614+
615+
530616
### Small Pitfall
531617

532618
**Note**: you can only pass literals (i.e. concrete values) as a pattern, not let-binding names or other things. The following doesn't work as expected:

0 commit comments

Comments
 (0)