是否有可能创建技术上可变大小的数组,但这在编译时是已知的?更准确地说,我想做这样的事情:

fn main() {
    for n in 1..5 {
        let array: [i32; n] = [0; n];
        // Do stuff with array
    }
}

这段代码不能编译,但我觉得它应该可以编译,因为编译器唯一可以解开for循环的事情是这样的:

fn main() {
    let array: [i32; 1] = [0; 1];
    let array: [i32; 2] = [0; 2];
    let array: [i32; 3] = [0; 3];
    let array: [i32; 4] = [0; 4];
    let array: [i32; 5] = [0; 5];
}

它编译并做我想要做的事情,但非常重复

我可以使用向量或其他数据 struct ,但这样我就会在堆中有变量,我认为不应该仅仅因为我在for循环中使用数组就使用堆

推荐答案

只要用unroll箱就行了.

#[unroll::unroll_for_loops]
fn main() {
    for n in 1..5 {
        let array: [i32; n] = [0; n];
        println!("{:?}", array);
    }
}

Rust相关问答推荐

Rust为什么应用于引用的操作符可以强制,而具有显式类型的let则不能?

如何在不安全的代码中初始化枚举 struct

Tauri tauri—apps/plugin—store + zustand

为什么对不可复制数据的引用的取消引用没有O权限来避免Rust中的双重释放?

Rust TcpStream不能在读取后写入,但可以在不读取的情况下写入.为什么?

值为可变对象的不可变HashMap

有没有办法指定只在Rust的测试中有效的断言?

当发送方分配给静态时,Tokio MPSC关闭通道

你能在Rust中弃用一个属性吗?

是否提供Bundle 在可执行文件中的warp中的静态文件?

为什么 tokio 在以奇怪的方式调用时只运行 n 个任务中的 n-1 个?

为什么 GAT、生命周期和异步的这种组合需要 `T: 'static`?

可以在旋转循环中调用try_recv()吗?

如何使用 Bincode 在 Rust 中序列化 Enum,同时保留 Enum 判别式而不是索引?

pyO3 和 Panics

类型判断模式匹配panic

将原始可变指针传递给 C FFI 后出现意外值

为什么 Rust 允许写入不可变的 RwLock?

为什么分配对变量的引用使我无法返回它

为什么-x试图解析为文字并在声明性宏中失败?