我想创建一个固定大小的可变数组。这些元素稍后在程序中初始化。如何初始化数组?
我试过这样做:
let mut array: [String; 126] = [String::new(); 126];
它给了我错误:
the trait bound 'std::string::String: std::marker::Copy' is not satisfied
the trait 'std::marker::Copy' is not implemented for 'std::string::String'
如何用新字符串初始化数组?
最佳答案
目前,数组的初始化还是有点古怪。
特别是,Default
在这里会很有用,但它只适用于最多 32 个数组:
let array: [String; 32] = Default::default();
超过这个数的任何数字都将无法编译,因为虽然 Rust 1.47 现在实现了数组类型的通用大小的一些特征,但 Default
还不是其中之一。 Default
的这 32 个实现是“某种程度上”手动添加的。
我们可以使用替代容器类型来克服这个问题,例如 Vec
。 vec!
宏可让您根据需要多次克隆字符串以填充新向量:
let mut array: Vec<String> = vec![String::new(); 126];
当然,根据您的用例,您也可以考虑偷懒,只使用 Iterator API 收集最终结果。 .
关于arrays - 在 Rust 中初始化字符串数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44186660/