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。