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