mirror of
https://github.com/ahgamut/rust-ape-example.git
synced 2024-05-15 01:52:42 +00:00
51 lines
1.3 KiB
Rust
51 lines
1.3 KiB
Rust
// ./src/trait/clone.md
|
|
|
|
|
|
// A unit struct without resources
|
|
#[derive(Debug, Clone, Copy)]
|
|
struct Unit;
|
|
|
|
// A tuple struct with resources that implements the `Clone` trait
|
|
#[derive(Clone, Debug)]
|
|
struct Pair(Box<i32>, Box<i32>);
|
|
|
|
fn part0() {
|
|
// Instantiate `Unit`
|
|
let unit = Unit;
|
|
// Copy `Unit`, there are no resources to move
|
|
let copied_unit = unit;
|
|
|
|
// Both `Unit`s can be used independently
|
|
println!("original: {:?}", unit);
|
|
println!("copy: {:?}", copied_unit);
|
|
|
|
// Instantiate `Pair`
|
|
let pair = Pair(Box::new(1), Box::new(2));
|
|
println!("original: {:?}", pair);
|
|
|
|
// Move `pair` into `moved_pair`, moves resources
|
|
let moved_pair = pair;
|
|
println!("moved: {:?}", moved_pair);
|
|
|
|
// Error! `pair` has lost its resources
|
|
//println!("original: {:?}", pair);
|
|
// TODO ^ Try uncommenting this line
|
|
|
|
// Clone `moved_pair` into `cloned_pair` (resources are included)
|
|
let cloned_pair = moved_pair.clone();
|
|
// Drop the original pair using std::mem::drop
|
|
drop(moved_pair);
|
|
|
|
// Error! `moved_pair` has been dropped
|
|
//println!("copy: {:?}", moved_pair);
|
|
// TODO ^ Try uncommenting this line
|
|
|
|
// The result from .clone() can still be used!
|
|
println!("clone: {:?}", cloned_pair);
|
|
}
|
|
|
|
pub fn main() {
|
|
part0();
|
|
}
|
|
|