#change #modify #state #replace #mem

已撤回 inplace

一个允许您临时拥有存储值的容器

使用旧Rust 2015

0.0.5 2020年8月27日
0.0.4 2020年2月16日
0.0.3 2020年2月16日
0.0.2 2020年2月16日
0.0.1 2020年2月16日

#28 in #mem

MIT/Apache

8KB
123

请使用 replace_with 代替!

travis

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> 解决了问题。

无运行时依赖