Struct core::cell::Ref1.0.0[−][src]

pub struct Ref<'b, T: ?Sized + 'b> { /* 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

获取 self 的 TypeId。 Read more

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

从拥有的值中借用。 Read more

执行转换。

执行转换。

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

执行转换。

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

执行转换。