慕哥6287543
我们可以使用此辅助函数:use std::convert::AsMut;fn clone_into_array<A, T>(slice: &[T]) -> Awhere A: Default + AsMut<[T]>, T: Clone,{ let mut a = A::default(); <A as AsMut<[T]>>::as_mut(&mut a).clone_from_slice(slice); a}得到更整洁的语法:fn main() { let original = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]; let e = Example { a: clone_into_array(&original[0..4]), b: clone_into_array(&original[4..10]), }; println!("{:?}", e);}只要T: Default + Clone。如果您知道您的类型实现Copy,则可以使用以下形式:use std::convert::AsMut;fn copy_into_array<A, T>(slice: &[T]) -> Awhere A: Default + AsMut<[T]>, T: Copy,{ let mut a = A::default(); <A as AsMut<[T]>>::as_mut(&mut a).copy_from_slice(slice); a}panic!如果目标数组和传入的切片的长度不相同,则这两种变体都将。