Trait UseCloned
trait UseCloned: Clone
Trait for objects whose Clone impl is lightweight (e.g. reference-counted)
Cloning an object implementing this trait should in general:
- be O(1) (constant) time regardless of the amount of data managed by the object,
- not require a memory allocation,
- not require copying more than roughly 64 bytes (a typical cache line size),
- not block the current thread,
- not have any semantic side effects (e.g. allocating a file descriptor), and
- not have overhead larger than a couple of atomic operations.
The UseCloned trait does not provide a method; instead, it indicates that
Clone::clone is lightweight, and allows the use of the .use syntax.
.use postfix syntax
Values can be .used by adding .use postfix to the value you want to use.
fn foo(f: Foo) {
// if `Foo` implements `Copy` f would be copied into x.
// if `Foo` implements `UseCloned` f would be cloned into x.
// otherwise f would be moved into x.
let x = f.use;
// ...
}
use closures
Use closures allow captured values to be automatically used.
This is similar to have a closure that you would call .use over each captured value.
Implementors
impl UseCloned for f64impl UseCloned for u8impl UseCloned for f128impl UseCloned for u16impl<T> UseCloned for NonZero<T>impl UseCloned for boolimpl UseCloned for u32impl UseCloned for charimpl UseCloned for u64impl<T> UseCloned for Option<T>impl UseCloned for u128impl<T, E> UseCloned for Result<T, E>impl UseCloned for isizeimpl UseCloned for i8impl UseCloned for i16impl UseCloned for i32impl UseCloned for i64impl UseCloned for i128impl UseCloned for f16impl UseCloned for f32impl UseCloned for usize