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 aRefCell
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 ofr.borrow().clone()to clone the contents of aRefCell`.
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 throughDeref`.
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 throughDeref`.
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)