mirror of
https://codeberg.org/andyscott/ziglings.git
synced 2024-12-22 14:03:10 -05:00
46 lines
1.2 KiB
Zig
46 lines
1.2 KiB
Zig
//
|
|
// Believe it or not, sometimes things go wrong in programs.
|
|
//
|
|
// In Zig, an error is a value. Errors are named so we can identify
|
|
// things that can go wrong. Errors are created in "error sets", which
|
|
// are just a collection of named errors.
|
|
//
|
|
// We have the start of an error set, but we're missing the condition
|
|
// "TooSmall". Please add it where needed!
|
|
const MyNumberError = error{
|
|
TooBig,
|
|
???,
|
|
TooFour,
|
|
};
|
|
|
|
const std = @import("std");
|
|
|
|
pub fn main() void {
|
|
var nums = [_]u8{2,3,4,5,6};
|
|
|
|
for (nums) |n| {
|
|
std.debug.print("{}", .{n});
|
|
|
|
const number_error = numberFail(n);
|
|
|
|
if (number_error == MyNumberError.TooBig) {
|
|
std.debug.print(">4. ", .{});
|
|
}
|
|
if (???) {
|
|
std.debug.print("<4. ", .{});
|
|
}
|
|
if (number_error == MyNumberError.TooFour) {
|
|
std.debug.print("=4. ", .{});
|
|
}
|
|
}
|
|
|
|
std.debug.print("\n", .{});
|
|
}
|
|
|
|
// Notice how this function can return any member of the MyNumberError
|
|
// error set.
|
|
fn numberFail(n: u8) MyNumberError {
|
|
if(n > 4) return MyNumberError.TooBig;
|
|
if(n < 4) return MyNumberError.TooSmall; // <---- this one is free!
|
|
return MyNumberError.TooFour;
|
|
}
|