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 协议》,转载必须注明作者和本文链接