我正在讀一本關於Rust的書,並開始玩Rust macros。所有的元變類型都在這裏解釋並且有例子,除了最後一個 - tt
。根據這本書,它是一個「單一的令牌樹」。我很好奇,它是什麼,它用於什麼?你能舉個例子嗎?在Rust宏中,tt元變類型意味着什麼?
10
A
回答
14
這是一個引入的概念,以確保無論在宏調用中是否正確匹配()
,[]
和{}
對。
例如,對於下面的程序:
fn main() {
println!("Hello world!");
}
令牌樹將是:
fn
main
()
- ∅
{ println!("Hello world!"); }
println
!
("Hello world!")
"Hello world!"
;
這形成了一個樹枝上,簡單的記號(fn
,main
等)是樹葉,以及任何由()
,[]
或{}
包圍有一個子樹。請注意,(
不會單獨顯示在令牌樹中:無法匹配(
而不匹配相應的)
。
例如:
macro_rules! {
(fn $name:ident $params:tt $body:tt) => { /* … */}
}
將與$name → main
,$params →()
,$body → { println!("Hello world!"); }
匹配上述功能。
令牌樹是要求最低的元變量類型:它匹配任何東西。它經常被用在具有「不真正關心」部分的宏中,特別是在具有「頭部」和「尾部」部分的宏中。例如,println!
宏具有匹配($fmt:expr, $($arg:tt)*)
的分支,其中$fmt
是格式字符串,而$($arg:tt)*
表示「所有其餘」,並且僅轉發到format_args!
。這意味着println!
不需要知道實際的格式並與其進行復雜的匹配。
相關問題
- 1. 什麼類型在Haskell意味着
- 2. 用下劃線實例化Rust泛型意味着什麼?
- 3. Verilog中的變量意味着什麼?
- 4. 在AngularJS中結尾意味着什麼double意味着
- 5. 什麼===在PHP意味着
- 6. 問號在類型參數綁定中意味着什麼?
- 7. 這種類型的http標題在symfony中意味着什麼?
- 8. var-less變量在TypeScript類中意味着什麼?
- 9. 多元化意味着什麼?
- 10. 斜槓在C語言的宏定義中意味着什麼?
- 11. 在excel宏中對範圍的平等意味着什麼?
- 12. 這個java泛型意味着什麼?
- 13. 變量$這意味着什麼PHP?
- 14. __file__變量意味着什麼?
- 15. 不變屬性意味着什麼?
- 16. 〜=是什麼。在Stata意味着什麼?
- 17. Rust完全沒有增量編譯意味着什麼?
- 18. 什麼是 '自我.__類__.__ missing__' 意味着
- 19. PREEMPTIVE_XE_DISPATCHER這意味着什麼?
- 20. Field.Index.NOT_ANALYZED_NO_NORMS意味着什麼
- 21. $這意味着什麼PHP?
- 22. MYSQLI_NUM意味着什麼?
- 23. * | *這意味着什麼CSS?
- 24. 溢出意味着什麼?
- 25. HttpServletResponse.SC_BAD_REQUEST意味着什麼?
- 26. 什麼呢JDBC:HSQLDB:hsqlTempFiles意味着
- 27. 奎因意味着什麼?
- 28. Haskell:Typeclass意味着其他類型類型
- 29. [Bindable]在動作中意味着什麼?
- 30. #[...]在emacs-lisp中意味着什麼?
感謝您的好解釋和例子,正是我需要的! –