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 協議》,轉載必須註明作者和本文連結