rust-quiz:008-tokenize-punctuation.rs

godme發表於2022-07-08
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 協議》,轉載必須註明作者和本文連結

相關文章