Struct std::cell::Ref
[−]
[src]
pub struct Ref<'b, T> where T: 'b + ?Sized {
// some fields omitted
}
Wraps a borrowed reference to a value in a RefCell
`RefCellbox. A wrapper type for an immutably borrowed value from a
RefCell
See the module-level documentation for more.
Methods
impl<'b, T> Ref<'b, T> where T: ?Sized
fn clone(orig: &Ref<'b, T>) -> Ref<'b, T>
: likely to be moved to a method, pending language changes
Copies a Ref
`Ref`.
The RefCell
`RefCell` is already immutably borrowed, so this cannot fail.
This is an associated function that needs to be used as
Ref::clone(...)
. A Clone
`Cloneimplementation or a method would interfere with the widespread use of
r.borrow().clone()to clone the contents of a
RefCell`.
fn map<U, F>(orig: Ref<'b, T>, f: F) -> Ref<'b, U> where U: ?Sized, F: FnOnce(&T) -> &U
: recently added
Make a new Ref
`Ref` for a component of the borrowed data.
The RefCell
`RefCell` is already immutably borrowed, so this cannot fail.
This is an associated function that needs to be used as Ref::map(...)
.
A method would interfere with methods of the same name on the contents
of a RefCell
`RefCellused through
Deref`.
Example
#![feature(cell_extras)] fn main() { use std::cell::{RefCell, Ref}; let c = RefCell::new((5, 'b')); let b1: Ref<(u32, char)> = c.borrow(); let b2: Ref<u32> = Ref::map(b1, |t| &t.0); assert_eq!(*b2, 5) }#![feature(cell_extras)] use std::cell::{RefCell, Ref}; let c = RefCell::new((5, 'b')); let b1: Ref<(u32, char)> = c.borrow(); let b2: Ref<u32> = Ref::map(b1, |t| &t.0); assert_eq!(*b2, 5)
fn filter_map<U, F>(orig: Ref<'b, T>, f: F) -> Option<Ref<'b, U>> where F: FnOnce(&T) -> Option<&U>, U: ?Sized
: recently added
Make a new Ref
`Ref` for a optional component of the borrowed data, e.g. an
enum variant.
The RefCell
`RefCell` is already immutably borrowed, so this cannot fail.
This is an associated function that needs to be used as
Ref::filter_map(...)
. A method would interfere with methods of the
same name on the contents of a RefCell
`RefCellused through
Deref`.
Example
#![feature(cell_extras)] fn main() { use std::cell::{RefCell, Ref}; let c = RefCell::new(Ok(5)); let b1: Ref<Result<u32, ()>> = c.borrow(); let b2: Ref<u32> = Ref::filter_map(b1, |o| o.as_ref().ok()).unwrap(); assert_eq!(*b2, 5) }use std::cell::{RefCell, Ref}; let c = RefCell::new(Ok(5)); let b1: Ref<Result<u32, ()>> = c.borrow(); let b2: Ref<u32> = Ref::filter_map(b1, |o| o.as_ref().ok()).unwrap(); assert_eq!(*b2, 5)