我想将 a 转换(u16, u16)为 a (f32, f32)。这是我尝试过的:
let tuple1 = (5u16, 8u16);
let tuple2 = tuple1 as (f32, f32);
Run Code Online (Sandbox Code Playgroud)
理想情况下,我想避免写作
let tuple2 = (tuple1.0 as f32, tuple1.1 as f32);
Run Code Online (Sandbox Code Playgroud)
没有内置的方法可以做到这一点,但可以使用宏来做到这一点:
macro_rules! tuple_as {
($t: expr, ($($ty: ident),*)) => {
{
let ($($ty,)*) = $t;
($($ty as $ty,)*)
}
}
}
fn main() {
let t: (u8, char, isize) = (97, 'a', -1);
let other = tuple_as!(t, (char, i32, i8));
println!("{:?}", other);
}
Run Code Online (Sandbox Code Playgroud)
打印('a', 97, -1)。
该宏仅适用于名称为单个标识符的类型之间的转换(这就是: ident引用的内容),因为它重用这些名称来绑定到源元组的元素以便能够转换它们。所有原始类型都是有效的单一标识符,因此它适用于那些。
| 归档时间: |
|
| 查看次数: |
1271 次 |
| 最近记录: |