Rust 用闭包初始化数组

Rust 用闭包初始化数组,rust,Rust,如何初始化数组,使每个元素以编程方式不同(而不是手动指定所有元素) 似乎应该有某种方法通过闭包来实现,例如: fn main() { let x: [u32; 10] = [0; 10]; println!("{:?}", x); let mut count = 0; let mut initfn = || { let tmp = count; count += 1; tmp }; // What I want below is a non-copyi

如何初始化数组,使每个元素以编程方式不同(而不是手动指定所有元素)

似乎应该有某种方法通过闭包来实现,例如:

fn main() {
    let x: [u32; 10] = [0; 10];
    println!("{:?}", x);

    let mut count = 0;
    let mut initfn = || { let tmp = count; count += 1; tmp };

    // What I want below is a non-copying array comprehension -- one
    // which runs initfn() 10 times...  Is there such a thing?  Maybe
    // using iterators?
    let y: [u32; 10] = [initfn(); 10];
    println!("{:?}", y);

    // The goal is to avoid the following because my real use case
    // does not allow default values for the array elements...
    let mut z: [usize; 10] = [0; 10];
    for i in 0..10 {
        z[i] = i;
    }
}
更新:是否可以在不使用“不安全”的情况下完成此操作


有一个一年多前的宏观体系看起来很有希望,但依赖于宏观体系的迭代反报价扩展,而这个宏观体系似乎并不存在。。。语言是否已更改以使之成为可能?

让y:[u32;10]=[initfn(),initfn(),initfn(),initfn(),initfn(),initfn(),initfn(),initfn(),initfn()
让x:Cow=Cow::from_iter((0..10).map(|idx | idx*2))
看起来很有希望,但它在封面下使用了一个Vec。