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

4
假设我有一些元组在栈上:
let a:(u8,u8,u8) = (1,2,3);

如何创建一个对所有或部分数组进行切片的方法?

注意,我在下面部分回答了自己的问题,但如果有人确切知道同构类型元组的答案,我会接受他们的答案。 - Andrew Wagner
2个回答

6

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

#![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]
}

还有这个请求进行了尝试,但它已经相当久远被关闭了。


谢谢!我想这将涉及到不安全的操作...除了帮助阻止人们完全这样做之外,这是一个相当不错的例子,展示了如何进行一些基本的不安全指针转换操作。 - Andrew Wagner

3

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接