2021-01-30 20:00:32 -05: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 02:18:41 -05:00
|
|
|
// var text: Text = getText("foo.txt");
|
2021-01-30 20:00:32 -05:00
|
|
|
//
|
2021-03-12 02:18:41 -05:00
|
|
|
// What happens if getText() can't find "foo.txt"? How do we express
|
2021-01-30 20:00:32 -05:00
|
|
|
// this in Zig?
|
|
|
|
//
|
2021-02-10 09:35:16 -05:00
|
|
|
// Zig lets us make what's called an "error union" which is a value
|
2021-01-30 20:00:32 -05:00
|
|
|
// which could either be a regular value OR an error from a set:
|
|
|
|
//
|
2021-03-12 02:18:41 -05:00
|
|
|
// var text: MyErrorSet!Text = getText("foo.txt");
|
2021-01-30 20:00:32 -05:00
|
|
|
//
|
|
|
|
// For now, let's just see if we can try making an error union!
|
|
|
|
//
|
|
|
|
const std = @import("std");
|
|
|
|
|
2021-02-15 16:55:44 -05:00
|
|
|
const MyNumberError = error{TooSmall};
|
2021-01-30 20:00:32 -05:00
|
|
|
|
|
|
|
pub fn main() void {
|
|
|
|
var my_number: ??? = 5;
|
|
|
|
|
|
|
|
// 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;
|
|
|
|
|
2021-04-04 16:23:27 -04:00
|
|
|
std.debug.print("I compiled!\n", .{});
|
2021-01-30 20:00:32 -05:00
|
|
|
}
|