diff options
Diffstat (limited to 'exercises/108_labeled_switch.zig')
| -rw-r--r-- | exercises/108_labeled_switch.zig | 24 |
1 files changed, 13 insertions, 11 deletions
diff --git a/exercises/108_labeled_switch.zig b/exercises/108_labeled_switch.zig index 88cb196..897fcf5 100644 --- a/exercises/108_labeled_switch.zig +++ b/exercises/108_labeled_switch.zig @@ -15,16 +15,16 @@ // 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 +// By combining all we've learned so far, we can now proceed with a labeled switch. // -// A labeled switch is some extra syntatic sugar, which comes with all sorts of +// A labeled switch is some extra syntactic sugar, which comes with all sorts of // candy (performance benefits). Don't believe me? Directly to source https://github.com/ziglang/zig/pull/21367 // // Here is the previous excerpt implemented as a labeled switch instead: @@ -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"); |
