pub trait VClone<'a>: VarLen {
type Cloner: Initializer<Self>;
fn vclone(&'a self) -> Self::Cloner;
}
Expand description
Support for cloning variable-length types.
Examples
use varlen::prelude::*;
let s_box: VBox<Str> = VBox::new(Str::copy("hello"));
let s: &Str = &*s_box;
let seq: Seq<Str> = seq![s.vclone(), s.vclone(), s.vclone()];
let mut iter = seq.iter();
assert_eq!(&iter.next().unwrap()[..], "hello");
assert_eq!(&iter.next().unwrap()[..], "hello");
assert_eq!(&iter.next().unwrap()[..], "hello");
assert!(iter.next().is_none());
Associated Types
type Cloner: Initializer<Self>
type Cloner: Initializer<Self>
An initializer that can produce a clone of an object of type Self
.
Examples
use varlen::prelude::*;
let s_box: VBox<Str> = VBox::new(Str::copy("hello"));
let s: &Str = &*s_box;
let seq: Seq<Str> = seq![s.vclone(), s.vclone(), s.vclone()];
let mut iter = seq.iter();
assert_eq!(&iter.next().unwrap()[..], "hello");
assert_eq!(&iter.next().unwrap()[..], "hello");
assert_eq!(&iter.next().unwrap()[..], "hello");
assert!(iter.next().is_none());
Required methods
Returns an initializer that will clone self
when run.
Examples
use varlen::prelude::*;
let s_box: VBox<Str> = VBox::new(Str::copy("hello"));
let s: &Str = &*s_box;
let seq: Seq<Str> = seq![s.vclone(), s.vclone(), s.vclone()];
let mut iter = seq.iter();
assert_eq!(&iter.next().unwrap()[..], "hello");
assert_eq!(&iter.next().unwrap()[..], "hello");
assert_eq!(&iter.next().unwrap()[..], "hello");
assert!(iter.next().is_none());