pub enum Option<T> {
None,
Some(T),
}
The Option type. See the module level documentation for more.
NoneNo value
Some(T)Some value T
impl<T> Option<T>
[src]
fn is_some(&self) -> boolReturns true if the option is a Some value.
let x: Option<u32> = Some(2); assert_eq!(x.is_some(), true); let x: Option<u32> = None; assert_eq!(x.is_some(), false);
fn is_none(&self) -> boolReturns true if the option is a None value.
let x: Option<u32> = Some(2); assert_eq!(x.is_none(), false); let x: Option<u32> = None; assert_eq!(x.is_none(), true);
fn as_ref(&self) -> Option<&T>Converts from Option<T> to Option<&T>.
Convert an Option<String> into an Option<usize>, preserving the original. The map method takes the self argument by value, consuming the original, so this technique uses as_ref to first take an Option to a reference to the value inside the original.
let num_as_str: Option<String> = Some("10".to_string());
// First, cast `Option<String>` to `Option<&String>` with `as_ref`,
// then consume *that* with `map`, leaving `num_as_str` on the stack.
let num_as_int: Option<usize> = num_as_str.as_ref().map(|n| n.len());
println!("still can print num_as_str: {:?}", num_as_str); fn as_mut(&mut self) -> Option<&mut T>Converts from Option<T> to Option<&mut T>.
let mut x = Some(2);
match x.as_mut() {
Some(v) => *v = 42,
None => {},
}
assert_eq!(x, Some(42)); fn expect(self, msg: &str) -> TUnwraps an option, yielding the content of a Some.
Panics if the value is a None with a custom panic message provided by msg.
let x = Some("value");
assert_eq!(x.expect("the world is ending"), "value");
let x: Option<&str> = None;
x.expect("the world is ending"); // panics with `the world is ending` fn unwrap(self) -> TMoves the value v out of the Option<T> if it is Some(v).
In general, because this function may panic, its use is discouraged. Instead, prefer to use pattern matching and handle the None case explicitly.
Panics if the self value equals None.
let x = Some("air");
assert_eq!(x.unwrap(), "air"); let x: Option<&str> = None; assert_eq!(x.unwrap(), "air"); // fails
fn unwrap_or(self, def: T) -> TReturns the contained value or a default.
assert_eq!(Some("car").unwrap_or("bike"), "car");
assert_eq!(None.unwrap_or("bike"), "bike"); fn unwrap_or_else<F>(self, f: F) -> T where F: FnOnce() -> TReturns the contained value or computes it from a closure.
let k = 10; assert_eq!(Some(4).unwrap_or_else(|| 2 * k), 4); assert_eq!(None.unwrap_or_else(|| 2 * k), 20);
fn map<U, F>(self, f: F) -> Option<U> where F: FnOnce(T) -> UMaps an Option<T> to Option<U> by applying a function to a contained value.
Convert an Option<String> into an Option<usize>, consuming the original:
let maybe_some_string = Some(String::from("Hello, World!"));
// `Option::map` takes self *by value*, consuming `maybe_some_string`
let maybe_some_len = maybe_some_string.map(|s| s.len());
assert_eq!(maybe_some_len, Some(13)); fn map_or<U, F>(self, default: U, f: F) -> U where F: FnOnce(T) -> UApplies a function to the contained value (if any), or returns a default (if not).
let x = Some("foo");
assert_eq!(x.map_or(42, |v| v.len()), 3);
let x: Option<&str> = None;
assert_eq!(x.map_or(42, |v| v.len()), 42); fn map_or_else<U, D, F>(self, default: D, f: F) -> U where D: FnOnce() -> U, F: FnOnce(T) -> UApplies a function to the contained value (if any), or computes a default (if not).
let k = 21;
let x = Some("foo");
assert_eq!(x.map_or_else(|| 2 * k, |v| v.len()), 3);
let x: Option<&str> = None;
assert_eq!(x.map_or_else(|| 2 * k, |v| v.len()), 42); fn ok_or<E>(self, err: E) -> Result<T, E>Transforms the Option<T> into a Result<T, E>, mapping Some(v) to Ok(v) and None to Err(err).
let x = Some("foo");
assert_eq!(x.ok_or(0), Ok("foo"));
let x: Option<&str> = None;
assert_eq!(x.ok_or(0), Err(0)); fn ok_or_else<E, F>(self, err: F) -> Result<T, E> where F: FnOnce() -> ETransforms the Option<T> into a Result<T, E>, mapping Some(v) to Ok(v) and None to Err(err()).
let x = Some("foo");
assert_eq!(x.ok_or_else(|| 0), Ok("foo"));
let x: Option<&str> = None;
assert_eq!(x.ok_or_else(|| 0), Err(0)); fn iter(&self) -> Iter<T>Returns an iterator over the possibly contained value.
let x = Some(4); assert_eq!(x.iter().next(), Some(&4)); let x: Option<u32> = None; assert_eq!(x.iter().next(), None);
fn iter_mut(&mut self) -> IterMut<T>Returns a mutable iterator over the possibly contained value.
let mut x = Some(4);
match x.iter_mut().next() {
Some(v) => *v = 42,
None => {},
}
assert_eq!(x, Some(42));
let mut x: Option<u32> = None;
assert_eq!(x.iter_mut().next(), None); fn and<U>(self, optb: Option<U>) -> Option<U>Returns None if the option is None, otherwise returns optb.
let x = Some(2);
let y: Option<&str> = None;
assert_eq!(x.and(y), None);
let x: Option<u32> = None;
let y = Some("foo");
assert_eq!(x.and(y), None);
let x = Some(2);
let y = Some("foo");
assert_eq!(x.and(y), Some("foo"));
let x: Option<u32> = None;
let y: Option<&str> = None;
assert_eq!(x.and(y), None); fn and_then<U, F>(self, f: F) -> Option<U> where F: FnOnce(T) -> Option<U>Returns None if the option is None, otherwise calls f with the wrapped value and returns the result.
Some languages call this operation flatmap.
fn sq(x: u32) -> Option<u32> { Some(x * x) }
fn nope(_: u32) -> Option<u32> { None }
assert_eq!(Some(2).and_then(sq).and_then(sq), Some(16));
assert_eq!(Some(2).and_then(sq).and_then(nope), None);
assert_eq!(Some(2).and_then(nope).and_then(sq), None);
assert_eq!(None.and_then(sq).and_then(sq), None); fn or(self, optb: Option<T>) -> Option<T>Returns the option if it contains a value, otherwise returns optb.
let x = Some(2); let y = None; assert_eq!(x.or(y), Some(2)); let x = None; let y = Some(100); assert_eq!(x.or(y), Some(100)); let x = Some(2); let y = Some(100); assert_eq!(x.or(y), Some(2)); let x: Option<u32> = None; let y = None; assert_eq!(x.or(y), None);
fn or_else<F>(self, f: F) -> Option<T> where F: FnOnce() -> Option<T>Returns the option if it contains a value, otherwise calls f and returns the result.
fn nobody() -> Option<&'static str> { None }
fn vikings() -> Option<&'static str> { Some("vikings") }
assert_eq!(Some("barbarians").or_else(vikings), Some("barbarians"));
assert_eq!(None.or_else(vikings), Some("vikings"));
assert_eq!(None.or_else(nobody), None); fn take(&mut self) -> Option<T>Takes the value out of the option, leaving a None in its place.
let mut x = Some(2); x.take(); assert_eq!(x, None); let mut x: Option<u32> = None; x.take(); assert_eq!(x, None);
impl<'a, T> Option<&'a T> where T: Clone
[src]
fn cloned(self) -> Option<T>Maps an Option<&T> to an Option<T> by cloning the contents of the option.
let x = 12; let opt_x = Some(&x); assert_eq!(opt_x, Some(&12)); let cloned = opt_x.cloned(); assert_eq!(cloned, Some(12));
impl<T> Option<T> where T: Default
[src]
fn unwrap_or_default(self) -> TReturns the contained value or a default
Consumes the self argument then, if Some, returns the contained value, otherwise if None, returns the default value for that type.
Convert a string to an integer, turning poorly-formed strings into 0 (the default value for integers). parse converts a string to any other type that implements FromStr, returning None on error.
let good_year_from_input = "1909"; let bad_year_from_input = "190blarg"; let good_year = good_year_from_input.parse().ok().unwrap_or_default(); let bad_year = bad_year_from_input.parse().ok().unwrap_or_default(); assert_eq!(1909, good_year); assert_eq!(0, bad_year);
impl<T> PartialEq<Option<T>> for Option<T> where T: PartialEq<T>
[src]
fn eq(&self, __arg_0: &Option<T>) -> boolThis method tests for self and other values to be equal, and is used by ==. Read more
fn ne(&self, __arg_0: &Option<T>) -> boolThis method tests for !=.
impl<T> IntoIterator for Option<T>
[src]
type Item = TThe type of the elements being iterated over.
type IntoIter = IntoIter<T>Which kind of iterator are we turning this into?
fn into_iter(self) -> IntoIter<T>Returns a consuming iterator over the possibly contained value.
let x = Some("string");
let v: Vec<&str> = x.into_iter().collect();
assert_eq!(v, ["string"]);
let x = None;
let v: Vec<&str> = x.into_iter().collect();
assert!(v.is_empty()); impl<'a, T> IntoIterator for &'a Option<T>
type Item = &'a TThe type of the elements being iterated over.
type IntoIter = Iter<'a, T>Which kind of iterator are we turning this into?
fn into_iter(self) -> Iter<'a, T>Creates an iterator from a value. Read more
impl<'a, T> IntoIterator for &'a mut Option<T>
type Item = &'a mut TThe type of the elements being iterated over.
type IntoIter = IterMut<'a, T>Which kind of iterator are we turning this into?
fn into_iter(self) -> IterMut<'a, T>Creates an iterator from a value. Read more
impl<T> Default for Option<T>
[src]
fn default() -> Option<T>Returns None.
impl<T> Clone for Option<T> where T: Clone
[src]
fn clone(&self) -> Option<T>Returns a copy of the value. Read more
fn clone_from(&mut self, source: &Self)Performs copy-assignment from source. Read more
impl<A, V> FromIterator<Option<A>> for Option<V> where V: FromIterator<A>
[src]
fn from_iter<I>(iter: I) -> Option<V> where I: IntoIterator<Item=Option<A>>Takes each element in the Iterator: if it is None, no further elements are taken, and the None is returned. Should no None occur, a container with the values of each Option is returned.
Here is an example which increments every integer in a vector, checking for overflow:
use std::u16;
let v = vec![1, 2];
let res: Option<Vec<u16>> = v.iter().map(|&x: &u16|
if x == u16::MAX { None }
else { Some(x + 1) }
).collect();
assert!(res == Some(vec![2, 3])); impl<T> Eq for Option<T> where T: Eq
[src]
impl<T> From<T> for Option<T>
fn from(val: T) -> Option<T>Performs the conversion.
impl<T> Debug for Option<T> where T: Debug
[src]
fn fmt(&self, __arg_0: &mut Formatter) -> Result<(), Error>Formats the value using the given formatter.
impl<T> Ord for Option<T> where T: Ord
[src]
fn cmp(&self, __arg_0: &Option<T>) -> OrderingThis method returns an Ordering between self and other. Read more
impl<T> Copy for Option<T> where T: Copy
[src]
impl<T> Hash for Option<T> where T: Hash
[src]
fn hash<__HT>(&self, __arg_0: &mut __HT) where __HT: HasherFeeds this value into the state given, updating the hasher as necessary.
fn hash_slice<H>(data: &[Self], state: &mut H) where H: HasherFeeds a slice of this type into the state provided.
impl<T> PartialOrd<Option<T>> for Option<T> where T: PartialOrd<T>
[src]
fn partial_cmp(&self, __arg_0: &Option<T>) -> Option<Ordering>This method returns an ordering between self and other values if one exists. Read more
fn lt(&self, __arg_0: &Option<T>) -> boolThis method tests less than (for self and other) and is used by the < operator. Read more
fn le(&self, __arg_0: &Option<T>) -> boolThis method tests less than or equal to (for self and other) and is used by the <= operator. Read more
fn gt(&self, __arg_0: &Option<T>) -> boolThis method tests greater than (for self and other) and is used by the > operator. Read more
fn ge(&self, __arg_0: &Option<T>) -> boolThis method tests greater than or equal to (for self and other) and is used by the >= operator. Read more
© 2010 The Rust Project Developers
Licensed under the Apache License, Version 2.0 or the MIT license, at your option.
https://doc.rust-lang.org/std/option/enum.Option.html