我想要一个 BigDecimal 值的数组,因为我提前知道大小并且它是常量。
然而我不知道如何在 Rust 中初始化它。这个方法:
#[derive(Debug)]
struct BigArray { values: [BigDecimal; 52] }
fn main() {
let mut v = BigArray { values: [BigDecimal::from_str("0"); 52] };
println!("{:?}", v);
}
Run Code Online (Sandbox Code Playgroud)
产生以下错误:
该特征
Copy未实现BigDecimal注意:该
Copy特征是必需的,因为重复的元素将被复制
我确实希望在数组中克隆默认的 BigDecimal 值。
难道不可能吗?Vec 是唯一的选择吗?
我可以将它变成借用值,但它不再是 BigDecimal 数组,并且生命周期管理和悬空指针变得非常棘手。
您可以动态创建一个 vec,然后将其转换为数组:
// --- Fake BigDecimal library for testing purposes.
#[derive(Clone, Debug)]
struct BigDecimal {
str: String,
}
impl BigDecimal {
fn from_str(str: &str) -> BigDecimal {
BigDecimal {
str: String::from(str),
}
}
}
// --- Code that is actually under test.
#[derive(Debug)]
struct BigArray {
values: [BigDecimal; 10],
}
fn main() {
let mut v = BigArray {
values: (0..10)
.map(|_| BigDecimal::from_str("0"))
.collect::<Vec<_>>()
.try_into()
.unwrap(),
};
println!("{:?}", v);
}
Run Code Online (Sandbox Code Playgroud)
或者使用map:
fn main() {
let mut v = BigArray {
values: [(); 10].map(|_| BigDecimal::from_str("0"))
};
println!("{:?}", v);
}
Run Code Online (Sandbox Code Playgroud)