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 协议》,转载必须注明作者和本文链接
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!