Struct std::cell::Ref1.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 的内容。

为借用数据的组件制作新的 Ref

RefCell 已经被不可改变地借用了,因此这不会失败。

这是一个关联函数,需要用作 Ref::map(...)。 方法会干扰通过 Deref 使用的 RefCell 内容中的同名方法。

Examples

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)
Run
🔬 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
🔬 This is a nightly-only experimental API. (cell_leak #69099)

转换为对基础数据的引用。

底层的 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

Trait Implementations

使用给定的格式化程序格式化该值。 Read more

解引用后的结果类型。

解引用值。

使用给定的格式化程序格式化该值。 Read more

Auto Trait Implementations

Blanket Implementations

获取 selfTypeIdRead more

从拥有的值中一成不变地借用。 Read more

从拥有的值中借用。 Read more

执行转换。

执行转换。

将给定值转换为 StringRead more

发生转换错误时返回的类型。

执行转换。

发生转换错误时返回的类型。

执行转换。