Struct core::cell::Ref
[−]
[src]
pub struct Ref<'b, T: ?Sized + 'b> { // 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: ?Sized> Ref<'b, T>
fn clone(orig: &Ref<'b, T>) -> Ref<'b, T>
: 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
: 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) }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>
: recently added
Make a new Ref
for a 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)