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

pub struct Ref<'b, T: ?Sized + 'b> {
    _value: &'b T,
    _borrow: BorrowRef<'b>,
}

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.

Fields

_value
_borrow

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

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

type Target = T

fn deref(&self) -> &T

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

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