mirror of
https://github.com/rust-lang/rust.git
synced 2025-02-14 16:03:17 +00:00
parent
1f9c392389
commit
54e685d4fd
@ -1159,7 +1159,7 @@ fn store_non_ref_bindings(bcx: @mut Block,
|
||||
add_clean_temp_mem(bcx, lldest, binding_info.ty);
|
||||
temp_cleanups.push(lldest);
|
||||
temp_cleanups
|
||||
}
|
||||
};
|
||||
}
|
||||
TrByRef => {}
|
||||
}
|
||||
|
@ -235,19 +235,24 @@ impl<T> Option<T> {
|
||||
self.take().map_consume_default(def, blk)
|
||||
}
|
||||
|
||||
/// Apply a function to the contained value or do nothing
|
||||
pub fn mutate(&mut self, f: &fn(T) -> T) {
|
||||
/// Apply a function to the contained value or do nothing.
|
||||
/// Returns true if the contained value was mutated.
|
||||
pub fn mutate(&mut self, f: &fn(T) -> T) -> bool {
|
||||
if self.is_some() {
|
||||
*self = Some(f(self.take_unwrap()));
|
||||
}
|
||||
true
|
||||
} else { false }
|
||||
}
|
||||
|
||||
/// Apply a function to the contained value or set it to a default
|
||||
pub fn mutate_default(&mut self, def: T, f: &fn(T) -> T) {
|
||||
/// Apply a function to the contained value or set it to a default.
|
||||
/// Returns true if the contained value was mutated, or false if set to the default.
|
||||
pub fn mutate_default(&mut self, def: T, f: &fn(T) -> T) -> bool {
|
||||
if self.is_some() {
|
||||
*self = Some(f(self.take_unwrap()));
|
||||
true
|
||||
} else {
|
||||
*self = Some(def);
|
||||
false
|
||||
}
|
||||
}
|
||||
|
||||
@ -575,4 +580,18 @@ mod tests {
|
||||
assert_eq!(it.size_hint(), (0, Some(0)));
|
||||
assert!(it.next().is_none());
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_mutate() {
|
||||
let mut x = Some(3i);
|
||||
assert!(x.mutate(|i| i+1));
|
||||
assert_eq!(x, Some(4i));
|
||||
assert!(x.mutate_default(0, |i| i+1));
|
||||
assert_eq!(x, Some(5i));
|
||||
x = None;
|
||||
assert!(!x.mutate(|i| i+1));
|
||||
assert_eq!(x, None);
|
||||
assert!(!x.mutate_default(0i, |i| i+1));
|
||||
assert_eq!(x, Some(0i));
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user