我是一个非常熟悉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