EDIT:一个简单的单行解决方案:收集元组 https://docs.rs/itertools/0.10.1/itertools/trait.Itertools.html#method.collect_tuple流行的itertools
crate.
let iter = 1..3;
let (x, y) = iter.collect_tuple().unwrap(); // yeah!
原答案
如果您想要更好的 IDE 类型提示,宏可能不是一个完美的解决方案。这是我的尝试:
fn tuple1<T>(a: &[T]) -> (&T) { (&a[0]) }
fn tuple2<T>(a: &[T]) -> (&T, &T) { (&a[0], &a[1]) }
fn tuple3<T>(a: &[T]) -> (&T, &T, &T) { (&a[0], &a[1], &a[2]) }
fn tuple4<T>(a: &[T]) -> (&T, &T, &T, &T) { (&a[0], &a[1], &a[2], &a[3]) }
fn tuple5<T>(a: &[T]) -> (&T, &T, &T, &T, &T) { (&a[0], &a[1], &a[2], &a[3], &a[4]) }
fn tuple6<T>(a: &[T]) -> (&T, &T, &T, &T, &T, &T) { (&a[0], &a[1], &a[2], &a[3], &a[4], &a[5]) }