我想创建一个固定大小的可变array.这些元素稍后会在程序中初始化.如何初始化数组?

我试着这么做:

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'

如何用新字符串初始化数组?

推荐答案

目前,数组的初始化仍然有点奇怪.

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来收集最终结果.

Rust相关问答推荐

如何处理动态 struct 实例化?

是否有可能同时避免不兼容的不透明类型和代码重复?

使用pyo3::Types::PyIterator的无限内存使用量

修改切片/引用数组

MPSC频道在接收器处阻塞

铁 rust 中的共享对象实现特征

在使用#[NO_STD]时,如何在Rust中收到紧急消息?

`RwLockWriteGuard_,T`不实现T实现的特征

不能在Rust中使用OpenGL绘制三角形

装箱特性如何影响传递给它的参数的生命周期 ?(举一个非常具体的例子)

Rust 中什么时候可以返回函数生成的字符串切片&str?

通过异常从同步代码中产生yield 是如何工作的?

为什么 Rust 需要可变引用的显式生命周期而不是常规引用?

部署Rust发布二进制文件的先决条件

一个函数调用会产生双重borrow 错误,而另一个则不会

Rust 引用元组和引用元组

试图理解 Rust 中的可变闭包

为什么 no_std crate 可以依赖于使用 std 的 crate?

为什么 Rust 标准库同时为 Thing 和 &Thing 实现特征?

在同一向量 Rust 中用另一个字符串扩展一个字符串