需求今天遇到一个需求,需要随机的生成一个枚举类型的实例。不像 Python 那样方便,用 Rust 需要实现特定的 Trait,最简单的想法就是给枚举类型不同的成员编个号,然后生成一个随机数,实例化对应的成员,如果成员拥有数据,就递归的随机生成这些数据。123456789101112implDistributionforStandard{fnsample(&self;,rng:&mutR;)->Instruction{matchrng.gen_range(0..459){0=>Instruction::Unreachable,1=>Instruction::Nop,2=>Instruction::Block(BlockType::FunctionType(rng.gen())),3=>Instruction::Catch(rng.gen()),// ... 预估超过2千行_=>unreachable!(),}}}需求本身确实简单,问题在于这个枚举类型的成员太多了,足足有 459 个,按照传统的思路,保守估计至少要写半天,并且很枯燥。图中可以看出,要对该枚举类型实现一个简单的函数都需要上千行。庞大的枚举类型我非常讨厌这种简单却繁重的工作的,我想到了 Rust 过程宏。过程宏当初学 Rust 的时候,了解过宏相关的内容,其中声明宏技术我已经在其他项目中实践过了,因为其本身就是个模板生成
...
继续阅读
(18)