Struct core::cell::Ref [] [src]

pub struct Ref<'b, T: ?Sized + 'b> {
    // some fields omitted
}
1.0.0

Wraps a borrowed reference to a value in a RefCell box. A wrapper type for an immutably borrowed value from a RefCell<T>.

See the module-level documentation for more.

Methods

impl<'b, T: ?Sized> Ref<'b, T>

fn clone(orig: &Ref<'b, T>) -> Ref<'b, T>

Unstable (cell_extras #27746)

: likely to be moved to a method, pending language changes

Copies a Ref.

The RefCell is already immutably borrowed, so this cannot fail.

This is an associated function that needs to be used as Ref::clone(...). A Clone implementation or a method would interfere with the widespread use of r.borrow().clone() to clone the contents of a RefCell.

fn map<U: ?Sized, F>(orig: Ref<'b, T>, f: F) -> Ref<'b, U> where F: FnOnce(&T) -> &U1.8.0

Make a new Ref for a component of the borrowed data.

The 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 used through Deref.

Example

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) }
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: ?Sized, F>(orig: Ref<'b, T>, f: F) -> Option<Ref<'b, U>> where F: FnOnce(&T) -> Option<&U>

Deprecated since 1.8.0

: can be built on Ref::map: https://crates.io/crates/ref_filter_map

Make a new Ref for an optional component of the borrowed data, e.g. an enum variant.

The 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 used 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)

Trait Implementations

impl<'b, T: ?Sized> Deref for Ref<'b, T>

type Target = T

fn deref(&self) -> &T

impl<'b, T: ?Sized + Unsize<U>, U: ?Sized> CoerceUnsized<Ref<'b, U>> for Ref<'b, T>

impl<'b, T: ?Sized + Debug> Debug for Ref<'b, T>

fn fmt(&self, f: &mut Formatter) -> Result