是否有任何技术原因Rust设计为元组使用点表示法而不是使用索引表示法(t[2])?
let t = (20u32, true, 'b')
t.2 // -> 'b'
Run Code Online (Sandbox Code Playgroud)
点符号在访问struct和object的属性时似乎很自然.我无法在线找到资源或解释.
我正在尝试通过编写一个简单的宏来学习 Rust 宏系统,该宏生成基于某些无符号整数类型(u8, u16, u32, u64)的结构。我想要这样的东西:
bitmessage! {
struct Header(u16);
version: 8, 5; // the first number is the length, second is value
data: 8, 5;
}
Run Code Online (Sandbox Code Playgroud)
更具体地说,我正在寻找某种方法来将某些信息存储在具有各种偏移量的无符号整数类型中。一个用例是读取一些字节并构造某种“消息”:
bitmessage! {
struct Header(u16);
version: 8, 5; // the first number is the length, second is value
data: 8, 5;
}
Run Code Online (Sandbox Code Playgroud)
消息的较高部分包含一些数据/信息,较低部分包含版本控制字段。(这只是一个玩具示例)。
这是我到目前为止的努力,但内部重复扩展无法编译:
macro_rules! bitmessage {
(struct $name:ident($n:ty);
$($field_name:ident: $length:expr, $value:expr;)*) => {
struct $name ($n);
$($name.1 = $name.1 | $value << $length)*
};
}
Run Code Online (Sandbox Code Playgroud)
一种解决方案可能是将相关字节存储在结构中,直接实现它(或使用特征)来获取适当的字段,但这会涉及太多的位移逻辑(这没有问题,但必须有更多)方便的方式)。
我知道 …