我正在寻求采取已知数量的投入铁 rust .在本例中,我将学习Euler项目的第54题的Flutter 克牌,其中每一行都解析成两手各有五张牌的牌.我发现有两种主要的方法来解决这种情况,这两种方法我都不喜欢.
方法1:
let mut buffer_1 = Vec::with_capacity(5);
for i in 0..5 {
buffer_1.push(i)
}
assert_eq!(buffer_1.len(), 5);
方法2:
let mut buffer_2 = [None, 5];
for i in 0..5 {
buffer_2[i as usize] = Some(i)
}
尽管方法1在编译时有一个已知的大小,但是方法1在堆上,方法2给了我一个可选值,我知道所有的值都是Some
.理想情况下,我希望的是能够将某些函数或数组集合到一个数组或类似数组中.例如:
fn array_from_colsure<T>(length: usize, closure: fn() -> T) -> Option<[T; length]> {
// implementation
}
#[test]
fn array_from_closure_test() {
let a: [i32; 5] = array_from_colsure(5, || {for i in 0..5 {i}}).unwrap()
}
Clarification:个 我希望找到这个功能的东西,而不是从头开始创建它.
正如西尔维奥·马约洛出色的回答所显示的(从最初的问题开始,我略微编辑了所需的功能),实现我的建议将需要惊人的unsafe
个代码数量(更不用说如此小的优化需要付出巨大的努力).因此,为少数项目这样做是不明智的.