ziglings/exercises/022_errors2.zig

30 lines
874 B
Zig
Raw Permalink Normal View History

2021-01-31 02:00:32 +01:00
//
// A common case for errors is a situation where we're expecting to
// have a value OR something has gone wrong. Take this example:
//
2021-03-12 08:18:41 +01:00
// var text: Text = getText("foo.txt");
2021-01-31 02:00:32 +01:00
//
2021-03-12 08:18:41 +01:00
// What happens if getText() can't find "foo.txt"? How do we express
2021-01-31 02:00:32 +01:00
// this in Zig?
//
// Zig lets us make what's called an "error union" which is a value
2021-01-31 02:00:32 +01:00
// which could either be a regular value OR an error from a set:
//
2021-03-12 08:18:41 +01:00
// var text: MyErrorSet!Text = getText("foo.txt");
2021-01-31 02:00:32 +01:00
//
// For now, let's just see if we can try making an error union!
//
const std = @import("std");
2021-02-15 22:55:44 +01:00
const MyNumberError = error{TooSmall};
2021-01-31 02:00:32 +01:00
pub fn main() void {
2024-05-27 15:21:28 +02:00
var my_number: MyNumberError!u8 = 5;
2021-01-31 02:00:32 +01:00
// Looks like my_number will need to either store a number OR
// an error. Can you set the type correctly above?
my_number = MyNumberError.TooSmall;
std.debug.print("I compiled!\n", .{});
2021-01-31 02:00:32 +01:00
}