3个版本
使用旧版Rust 2015
0.1.2 | 2016年12月15日 |
---|---|
0.1.1 | 2015年11月15日 |
0.1.0 | 2015年11月15日 |
1819 在 Rust模式 中
12KB
227 行
iota-rs
iota-rs是一个为怀念const块和iota的其他Go程序员提供的Rust宏。
Go
const (
Sunday = iota
Monday
Tuesday
Wednesday
Thursday
Friday
Partyday
numberOfDays // this constant is not exported
)
Rust
#![feature(plugin)]
#![plugin(iota)]
consts!{
pub SUNDAY: i32 = iota!();
pub MONDAY;
pub TUESDAY;
pub WEDNESDAY;
pub THURSDAY;
pub FRIDAY;
pub PARTYDAY;
NUMBER_OF_DAYS; // this constant is not exported
}
类似于Go,你可以在一行中定义多个常量,并使用下划线跳过值。
Go
const (
bit0, mask0 = 1 << iota, 1<<iota - 1 // bit0 == 1, mask0 == 0
bit1, mask1 // bit1 == 2, mask1 == 1
_, _ // skips iota == 2
Bit3, Mask3 // bit3 == 8, mask3 == 7
)
Rust
#![feature(plugin)]
#![plugin(iota)]
consts!{
(BIT0, MASK0): (i32, i32) = (1 << iota!(), 1<<iota!() - 1); // bit0 == 1, mask0 == 0
(BIT1, MASK1); // bit1 == 2, mask1 == 1
(_, _); // skips iota == 2
(pub BIT3, pub MASK3); // bit3 == 8, mask3 == 7
}
Rust无插件
// bit0 == 1, mask0 == 0
const BIT0: i32 = 1 << 0;
const MASK0: i32 = 1<<0 - 1;
// bit1 == 2, mask1 == 1
const BIT1: i32 = 1 << 1;
const MASK1: i32 = 1<<1 - 1;
// bit3 == 8, mask3 == 7
pub const BIT3: i32 = 1 << 3;
pub const MASK3: i32 = 1<<1 - 3;
正如你所看到的,与基础语言相比,此插件使得创建大量类似数值常量变得容易,无需大量错误易发的复制粘贴或需要定义自己的短期使用宏。
对于从Go过来的程序员,你可能已经注意到了一些差异
- Rust更喜欢全部大写的常量,并且不基于大写字母来确定可见性,因此导出的常量必须标记为"pub"。
- Rust常量必须显式地指定类型。
- iota不是一个保留关键字,而是一个宏调用。
- Rust的多个赋值使用更类似元组的结构。