rust-quiz:008-tokenize-punctuation.rs
题目
macro_rules! m {
(==>) => { print!("1"); };
(= = >) => { print!("2"); };
(== >) => { print!("3"); };
(= =>) => { print!("4"); };
}
fn main() {
m!(==>);
m!(= = >);
m!(== >);
m!(= =>);
}
关键
rust中的符号解析是有自己的系统的。
虽然代码上可以有不同写法,但是某些看起来不一样的东西,解析结果是一样的。
对于符号的解析,rust是按照两个概念进行划分的:最小单元和分组。
一个符号在rust中必定会拆分成一个组,而小组中的符号都是不可分割的。
相关的符号可以查表查看:docs.rs/syn/0.15.22/syn/token/inde...
比如==>,虽然连接在一起,但是==作为一个独立单元解析,>作为另一部分。
比如= = >,因为明确彼此分割,所以结果也是= = >
审题
这道题无非就是考察两点
- 匹配
- 符号解析
匹配按照优先级就不用说了,主要是符号解析。
如果解析结果一致,就会走入匹配的逻辑当中。
题解
==>:== >= = >:= = >== >:== >= =>:= =>
对照结果不难看出,m中的匹配项,有重复,因此只会执行优先级较高的那个。
答案
结果不言自明,1214
本作品采用《CC 协议》,转载必须注明作者和本文链接
关于 LearnKu
推荐文章: