我正在创建一个小型汇编程序,并为Instruction
对象创建一个枚举:
#[derive(Debug,PartialEq)]
pub enum Operand {
Register(Option<Register>), // Register is another enum
Immediate(Option<i32>),
Label(Option<String>), // Load the memory address for the lable
None
}
我想根据提供的操作数类型检查从输入文件读取的给定源代码行的语法,并将其与指令集匹配,所以我并不关心存储在枚举中的值,只是他们的变种。有什么是
这样的最佳方法另一个结构,我不知道编译时a和b的值/变体
is_same_variant(var, Operand::Immediate(None))
var是结构实例中的一个字段,它根据用户输入获取操作数的变体,因此它可以是
Operand::Label("foo")
返回false
Operand::Immediate(7)
返回true
我不喜欢使用枚举或任何东西,但这个问题出现在我的代码中3次,我真的不想重复相同的代码3次。
在搜索过程中,我找到了
macro_rules! match_variant {
($val:expr, $test:pat) => (
match $val {
$test(_) => true,
_ => false,
}
)
}
但它给出了编译器错误non-ident macro paths are experimental (see issue #35896)
。这对我来说是否有用?