summaryrefslogtreecommitdiffstatshomepage
path: root/exercises/23_errors3.zig
diff options
context:
space:
mode:
Diffstat (limited to 'exercises/23_errors3.zig')
-rw-r--r--exercises/23_errors3.zig28
1 files changed, 28 insertions, 0 deletions
diff --git a/exercises/23_errors3.zig b/exercises/23_errors3.zig
new file mode 100644
index 0000000..6060bf1
--- /dev/null
+++ b/exercises/23_errors3.zig
@@ -0,0 +1,28 @@
+//
+// One way to deal with error unions is to "catch" any error and
+// replace it with a default value.
+//
+// foo = canFail() catch 6;
+//
+// If canFail() fails, foo will equal 6.
+//
+const std = @import("std");
+
+const MyNumberError = error{ TooSmall };
+
+pub fn main() void {
+ var a: u32 = addTwenty(44) catch 22;
+ var b: u32 = addTwenty(4) ??? 22;
+
+ std.debug.print("a={}, b={}", .{a,b});
+}
+
+// Please provide the return type from this function.
+// Hint: it'll be an error union.
+fn addTwenty(n: u32) ??? {
+ if (n < 5) {
+ return MyNumberError.TooSmall;
+ } else {
+ return n + 20;
+ }
+}