summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChris Boesch <chrboesch@noreply.codeberg.org>2025-01-08 14:30:04 +0000
committerChris Boesch <chrboesch@noreply.codeberg.org>2025-01-08 14:30:04 +0000
commitb1fcca9d82a6f95543a27a3bf820154be4944923 (patch)
treeb240b905c30f4a2d52261853989d67d53ae8d85c
parent468e3d7eed7cfbb68067afb34593dbc1109396d7 (diff)
parenta47dfe1f4d23c29ca0af2b4f16ec65a902e8a569 (diff)
Merge pull request 'Update: 108 Labeled switch example to contain default case for exhaustion' (#196) from mikkurogue/exercises:main into main
Reviewed-on: https://codeberg.org/ziglings/exercises/pulls/196 closes #195
-rw-r--r--exercises/108_labeled_switch.zig20
1 files changed, 11 insertions, 9 deletions
diff --git a/exercises/108_labeled_switch.zig b/exercises/108_labeled_switch.zig
index 88cb196..16a5879 100644
--- a/exercises/108_labeled_switch.zig
+++ b/exercises/108_labeled_switch.zig
@@ -15,11 +15,11 @@
// 1 => { op = 2; continue; },
// 2 => { op = 3; continue; },
// 3 => return,
-// 4 => {},
+// else => {},
// }
// break;
// }
-// std.debug.print("This statement cannot be reached");
+// std.debug.print("This statement cannot be reached\n", .{});
// }
//
// By combining all we've learned so far, we can now proceed with a labeled switch
@@ -34,21 +34,23 @@
// 1 => continue :foo 2,
// 2 => continue :foo 3,
// 3 => return,
-// 4 => {},
+// else => {},
// }
-// std.debug.print("This statement cannot be reached");
+// std.debug.print("This statement cannot be reached\n", .{});
// }
//
// The flow of execution on this second case is:
// 1. The switch starts with value '1';
// 2. The switch evaluates to case '1' which in turn uses the continue statement
-// to re-evaluate the labeled switch again, now providing the value '2';
+// to re-evaluate the labeled switch again, now providing the value '2';
// 3. In the case '2' we repeat the same pattern as case '1'
-// but instead the value to be evaluated is now '3';
-// 4. Finally we get to case '3', where we return from the function as a whole.
+// but instead the value to be evaluated is now '3';
+// 4. Finally we get to case '3', where we return from the function as a whole,
+// so the debug statement is never executed.
+// 5. In this example, since the input does not have clear, exhaustive patterns and
+// can essentially be any 'u8' integer, we need to handle all cases not explicitly
+// covered by using the 'else => {}' branch as the default case.
//
-// Since step 4 or a break stament do not exist in this switch, the debug statement is
-// never executed
//
const std = @import("std");