patternrustCritical
What are Some and None?
Viewed 0 times
someareandnonewhat
Problem
I came across some output I don't understand using
the output is
I've dabbled in Haskell before, and by that I mean looked at a tutorial site for 10 minutes and ran back to C++, but I remember reading something about
Vec::get. Here's the code:fn main() {
let command = [('G', 'H'), ('H', '5')];
for i in 0..3 {
print!(" {} ", i);
println!("{:?}", command.get(i));
}
}the output is
0 Some(('G', 'H'))
1 Some(('H', '5'))
2 None
I've dabbled in Haskell before, and by that I mean looked at a tutorial site for 10 minutes and ran back to C++, but I remember reading something about
Some and None for Haskell. I was surprised to see this here in Rust. Could someone explain why .get() returns Some or None?Solution
The signature of
That is, it returns an
This is the same as the core
These types are often used to represent failure when there's only one possibility for why something failed, for example,
See also:
get (for slices, not Vec, since you're using an array/slice) isfn get(&self, index: usize) -> Option
That is, it returns an
Option, which is an enum defined likepub enum Option {
None,
Some(T),
}
None and Some are the variants of the enum, that is, a value with type Option can either be a None, or it can be a Some containing a value of type T. You can create the Option enum using the variants as well:let foo = Some(42);
let bar = None;
This is the same as the core
data Maybe a = Nothing | Just a type in Haskell; both represent an optional value, it's either there (Some/Just), or it's not (None/Nothing).These types are often used to represent failure when there's only one possibility for why something failed, for example,
.get uses Option to give type-safe bounds-checked array access: it returns None (i.e. no data) when the index is out of bounds, otherwise it returns a Some containing the requested pointer.See also:
- Why don't Option's Some and None variants need to be qualified?
- What is the difference between Some and Option in Rust?
Context
Stack Overflow Q#24771655, score: 110
Revisions (0)
No revisions yet.