about summary refs log tree commit diff
diff options
context:
space:
mode:
authorJakub Wieczorek <jakub@jakub.cc>2014-09-29 22:40:26 +0200
committerJakub Wieczorek <jakub@jakub.cc>2014-09-30 18:54:03 +0200
commite53f4a6b94623076a912df0c770c591d710c5de0 (patch)
treeff14599837abada41d64c4aaa2bbf7964dd15260
parent13e00e4a3d18802ca6407e59935be9f2c33ec061 (diff)
downloadrust-e53f4a6b94623076a912df0c770c591d710c5de0.tar.gz
rust-e53f4a6b94623076a912df0c770c591d710c5de0.zip
Add `if let` to the reference
-rw-r--r--src/doc/reference.md15
1 files changed, 14 insertions, 1 deletions
diff --git a/src/doc/reference.md b/src/doc/reference.md
index 0500088bbdc..14fc1d8d73d 100644
--- a/src/doc/reference.md
+++ b/src/doc/reference.md
@@ -3231,7 +3231,7 @@ for i in range(0u, 256) {
 if_expr : "if" no_struct_literal_expr '{' block '}'
           else_tail ? ;
 
-else_tail : "else" [ if_expr
+else_tail : "else" [ if_expr | if_let_expr
                    | '{' block '}' ] ;
 ```
 
@@ -3436,6 +3436,19 @@ let message = match maybe_digit {
 };
 ```
 
+### If let expressions
+
+```{.ebnf .gram}
+if_let_expr : "if" "let" pat '=' expr '{' block '}'
+               else_tail ? ;
+else_tail : "else" [ if_expr | if_let_expr | '{' block '}' ] ;
+```
+
+An `if let` expression is semantically identical to an `if` expression but in place
+of a condition expression it expects a refutable let statement. If the value of the
+expression on the right hand side of the let statement matches the pattern, the corresponding
+block will execute, otherwise flow proceeds to the first `else` block that follows.
+
 ### Return expressions
 
 ```{.ebnf .gram}