我是一個非常熟悉C和C++語言的程序員,但是我對自然界的功能很少有經驗。我試圖學習Rust並想知道Rust如何定義一個模式,以及與Rust中的match
表達式匹配的模式是什麼。什麼是Rust中模式的定義,什麼是模式匹配?
回答
Rust中存在許多類型的圖案。最值得注意的是:
- 文字,如
42
。這些匹配給定的值。所以如果你做,如果f()
返回42,則將輸入42個案例。 標識符,例如
x
。這匹配任何內容並將匹配的值分配給x
。所以在下面的代碼中:match f() { 42 => println!("Correct!"), x => println!("{} is the wrong answer", x) }
「正確!」將被打印,如果
f()
返回42,否則輸入的號碼將被打印爲「是錯誤的答案」。通配符模式
_
。就像一個標識符,它匹配任何東西,但與標識符不同,沒有分配任何東西使用這個,如果你並不需要匹配的值(說你不會想打印在上面的例子中輸入的號碼,那麼你可以只寫_ => println!("Wrong")
對於enum的任何變體
X(arg1, ..., argN)
,X(pattern1, ..., patternN)
是。有效的模式和用於任何變體Y
無參數,Y
是有效模式Y
所述變體相匹配的圖案Y
圖案X(pattern1, ..., patternN)
所述變體X
的一個實例,如果它的參數匹配模式pattern1
通過patternN
分別考慮這個例子匹配:enum Foo { X(i32, i32), Y } fn g() -> Foo { ... } fn foo() { match g() { X(a,b) -> a+b Y -> 0 } }
如果
g()
返回X
,則foo()將返回X值的總和,否則返回0,如果g()
返回Y
。
有用鏈接:[Match](https://doc.rust-lang.org/book/match.html)和[Patterns](https://doc.rust-lang.org/book/patterns.html)本書和參考文獻[匹配表達式](https://doc.rust-lang.org/reference.html#match-expressions)。其他重要模式包括元組,用「|」連接的模式,範圍和帶有「@」的子模式。根據Enum變體的聲明方式,Enum變體可能有'X','X(..)'或'X {..}'語法。 –
- 1. 這是什麼模式匹配?
- 2. 這是什麼模式匹配算法?
- 3. scala中匹配模式中case的含義是什麼?
- 4. 模式匹配序列理解的慣用方式是什麼?
- 5. 什麼是^ ON $的意義和^ OFF $在URL重寫模式,什麼可以匹配這個模式
- 6. 什麼是MVC模式中的「模型」?
- 7. 正則表達式匹配模式「\\ [。* \\]」是什麼意思?
- 8. 設計模式 - 這是什麼模式?
- 9. 爲什麼我的模式不匹配?
- 10. 爲什麼grep的匹配模式「\'」
- 11. 什麼是scala模式匹配中的@符號?
- 12. 模式匹配中byte_size的語法是什麼?
- 13. 什麼是「垃圾適配器模式」?
- 14. 什麼是適配器對象模式?
- 15. 什麼是雙向適配器模式
- 16. 什麼是「空」模式?
- 17. 什麼是json超模式?
- 18. 什麼是怪癖模式?
- 19. 什麼是UI模式?
- 20. 什麼是uWSGI主模式?
- 21. 什麼是位模式?
- 22. 什麼是HMVC模式?
- 23. 這是什麼模式?
- 24. preg_match - 這是什麼模式?
- 25. 什麼是全屏模式
- 26. 什麼是CVS「pserver」模式?
- 27. 什麼是DataVO模式?
- 28. 什麼是appcontroller模式?
- 29. 什麼是這種模式
- 30. 什麼是爲什麼使用會話模式:SQL Server模式?
[書](https://doc.rust-lang.org/book/patterns.html)解釋只是 –
這本書是我轉到源,它並沒有爲我計算的。我誤解了這一點,對我的推理並不深入。 – TheRenegade
@TheRenegade你應該爲這本書開一個問題。如果你不理解它並且可以解釋什麼是錯誤的,那麼這本書本身就可以得到改進,每個人都可以獲益**。 – Shepmaster