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 box. A wrapper type for an immutably borrowed value from a RefCell<T>.

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>

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

Unstable (cell_extras #27746)

: recently added

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

#![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

Unstable (cell_extras #27746)

: recently added

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> Deref for Ref<'b, T> where T: ?Sized

type Target = T

fn deref(&self) -> &T

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

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