According to the docs for Option
, Option
is an enum with variants Some<T>
and None
.
Why is it possible to refer to Some
and None
without qualifying them?
For example, this works fine:
let x = Option::Some(5);
match x {
Some(a) => println!("Got {}", a),
None => println!("Got None"),
}
But this fails to compile:
enum Foo<T> {
Bar(T),
Baz,
}
let x = Foo::Bar(5);
match x {
Bar(a) => println!("Got {}", a),
Baz => println!("Got Baz"),
}
The error from the compiler is unresolved enum variant, struct or const `Bar`
The Option<T> enum has two variants: None , to indicate failure or lack of value, and. Some(value) , a tuple struct that wraps a value with type T .
Type Option represents an optional value: every Option is either Some and contains a value, or None , and does not. Option types are very common in Rust code, as they have a number of uses: Initial values. Return values for functions that are not defined over their entire input range (partial functions)
The Rust prelude, which is automatically inserted into every source file, contains this line:
pub use option::Option::{self, Some, None};
Which brings Option
and both its variants in scope.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With