mirror of
https://codeberg.org/ziglings/exercises.git
synced 2024-12-26 17:36:29 +00:00
41 lines
858 B
Zig
41 lines
858 B
Zig
|
//
|
||
|
// Zig has a handy "try" shortcut for this common error handling pattern:
|
||
|
//
|
||
|
// canFail() catch |err| return err;
|
||
|
//
|
||
|
// which can be more compactly written as:
|
||
|
//
|
||
|
// try canFail();
|
||
|
//
|
||
|
const std = @import("std");
|
||
|
|
||
|
const MyNumberError = error{
|
||
|
TooSmall,
|
||
|
TooBig,
|
||
|
};
|
||
|
|
||
|
pub fn main() void {
|
||
|
var a: u32 = addFive(44) catch 0;
|
||
|
var b: u32 = addFive(14) catch 0;
|
||
|
var c: u32 = addFive(4) catch 0;
|
||
|
|
||
|
std.debug.print("a={}, b={}, c={}", .{a,b,c});
|
||
|
}
|
||
|
|
||
|
fn addFive(n: u32) MyNumberError!u32 {
|
||
|
//
|
||
|
// This function needs to return any error which might come back from fix().
|
||
|
// Please use a "try" statement rather than a "catch".
|
||
|
//
|
||
|
var x = detect(n);
|
||
|
|
||
|
return x + 5;
|
||
|
}
|
||
|
|
||
|
fn detect(n: u32) MyNumberError!u32 {
|
||
|
if (n < 10) return MyNumberError.TooSmall;
|
||
|
if (n > 20) return MyNumberError.TooBig;
|
||
|
return n;
|
||
|
}
|
||
|
|