在Rust中,如何创建由元组支持的切片?

时间:2014-11-28 17:35:20

标签: tuples rust slice

假设我在堆栈上有一些元组:

let a:(u8,u8,u8) = (1,2,3);

如何在所有或某些?

中创建切片

2 个答案:

答案 0 :(得分:4)

Rust引用defines元组具有连续的布局和定义的顺序,因此您可以获取指向元组的第一个元素并将其转换为切片的指针:

#![feature(tuple_indexing)]

use std::slice;

fn main() {
    let t = (1u8, 2u8, 3u8);
    let f: *const u8 = &t.0;
    let s = unsafe { slice::from_raw_buf(&f, 3) };
    println!("{}", s);  // [1, 2, 3]
}

还有this RFC,但很久以前就关闭了。

答案 1 :(得分:3)

在大多数情况下,这样做是没有意义的。元组和具有相同大小的固定大小数组之间的主要区别在于元组支持异构元素,而数组包含相同类型的元素。切片是指向内存中连续的〜相同类型值的数组的胖指针,因此虽然它们可能对某些元组有意义,但它们通常不会,因此元组不支持切片操作。