我们如何在 Rust 中初始化 BigDecimal 数组?

Tha*_*Tyl 5 rust

我想要一个 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 数组,并且生命周期管理和悬空指针变得非常棘手。

Rust 游乐场片段

Net*_*ave 3

您可以动态创建一个 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)

操场