使用旧Rust 2015
| 0.0.5 |
|
|---|---|
| 0.0.4 |
|
| 0.0.3 |
|
| 0.0.2 |
|
| 0.0.1 |
|
#28 in #mem
8KB
123 行
请使用 replace_with 代替!
inplace
请使用 replace_with 代替!
一个允许您临时拥有存储值的容器。
有时您可能遇到这样的情况,您对某个值有一个可变引用 a,并且有一个函数类似于 a -> a,您想使用此函数来修改引用的值。因此,您可能会认为您需要一些增强版的 mem:replace 函数,可以将其命名为 inplace,并看起来像这样
fn inplace<T>(a: &mut T, f: impl FnOnce(T) -> T);
但这样的函数不存在!而且更进一步:它 不能 存在。所以在这种情况下,您需要更改您的代码的一部分:提供可变引用的部分,或者修改函数。第二种方法是常规方法:通常,可变引用是表示临时拥有的唯一合适方式,因此,而不是 FnOnce(T) -> T,它应该是 FnOnce(&mut T)。但在某些情况下,保持使用 FnOnce(T) -> T 更好,并更改另一部分,即 &mut T。
此软件包提供了一个特殊的类型包装 Inplace<T>,它具有与源类型 T 相同的大小和内存表示,但具有所需的 inplace 函数。因此,将 &mut T 更改为 &mut Inplace<T> 解决了问题。