Struct std::cell::Ref 1.0.0[−][src]
pub struct Ref<'b, T> where
T: 'b + ?Sized, { /* fields omitted */ }
Expand description
在 RefCell
box 中将借用的引用括起来。
从 RefCell<T>
不变借来的值的包装器类型。
有关更多信息,请参见 module-level documentation。
Implementations
复制 Ref
。
RefCell
已经被不可改变地借用了,因此这不会失败。
这是一个关联函数,需要用作 Ref::clone(...)
。
Clone
的实现或方法将干扰 r.borrow().clone()
的广泛使用,以克隆 RefCell
的内容。
pub fn filter_map<U, F>(
orig: Ref<'b, T>,
f: F
) -> Result<Ref<'b, U>, Ref<'b, T>> where
F: FnOnce(&T) -> Option<&U>,
U: ?Sized,
[src]🔬 This is a nightly-only experimental API. (cell_filter_map
#81061)
recently added
pub fn filter_map<U, F>(
orig: Ref<'b, T>,
f: F
) -> Result<Ref<'b, U>, Ref<'b, T>> where
F: FnOnce(&T) -> Option<&U>,
U: ?Sized,
[src]🔬 This is a nightly-only experimental API. (cell_filter_map
#81061)
recently added
为借用数据的可选组件制作新的 Ref
。
如果闭包返回 None
,则原始守卫将作为 Err(..)
返回。
RefCell
已经被不可改变地借用了,因此这不会失败。
这是一个关联函数,需要用作 Ref::filter_map(...)
。
方法会干扰通过 Deref
使用的 RefCell
内容中的同名方法。
Examples
#![feature(cell_filter_map)] use std::cell::{RefCell, Ref}; let c = RefCell::new(vec![1, 2, 3]); let b1: Ref<Vec<u32>> = c.borrow(); let b2: Result<Ref<u32>, _> = Ref::filter_map(b1, |v| v.get(1)); assert_eq!(*b2.unwrap(), 2);Run
将 Ref
拆分为多个 Ref
,以用于借用数据的不同组成部分。
RefCell
已经被不可改变地借用了,因此这不会失败。
这是一个关联函数,需要用作 Ref::map_split(...)
。
方法会干扰通过 Deref
使用的 RefCell
内容中的同名方法。
Examples
use std::cell::{Ref, RefCell}; let cell = RefCell::new([1, 2, 3, 4]); let borrow = cell.borrow(); let (begin, end) = Ref::map_split(borrow, |slice| slice.split_at(2)); assert_eq!(*begin, [1, 2]); assert_eq!(*end, [3, 4]);Run
转换为对基础数据的引用。
底层的 RefCell
永远不会再被可变借用,并且总是看起来已经是不可更改的借用。
泄漏超过一定数量的引用不是一个好主意。
如果总共只发生了少量的泄漏,则可以再次借用 RefCell
。
这是一个关联函数,需要用作 Ref::leak(...)
。
方法会干扰通过 Deref
使用的 RefCell
内容中的同名方法。
Examples
#![feature(cell_leak)] use std::cell::{RefCell, Ref}; let cell = RefCell::new(0); let value = Ref::leak(cell.borrow()); assert_eq!(*value, 0); assert!(cell.try_borrow().is_ok()); assert!(cell.try_borrow_mut().is_err());Run