1
Fork 0

Auto merge of #28913 - steveklabnik:rollup, r=steveklabnik

- Successful merges: #28621, #28872, #28893, #28904, #28905, #28908, #28910
- Failed merges: #28906
This commit is contained in:
bors 2015-10-08 19:05:54 +00:00
commit e38210b195
7 changed files with 65 additions and 6 deletions

View file

@ -258,7 +258,7 @@ symbol : "::" | "->"
| ',' | ';' ; | ',' | ';' ;
``` ```
Symbols are a general class of printable [token](#tokens) that play structural Symbols are a general class of printable [tokens](#tokens) that play structural
roles in a variety of grammar productions. They are catalogued here for roles in a variety of grammar productions. They are catalogued here for
completeness as the set of remaining miscellaneous printable tokens that do not completeness as the set of remaining miscellaneous printable tokens that do not
otherwise appear as [unary operators](#unary-operator-expressions), [binary otherwise appear as [unary operators](#unary-operator-expressions), [binary

View file

@ -418,7 +418,7 @@ The two values of the boolean type are written `true` and `false`.
### Symbols ### Symbols
Symbols are a general class of printable [token](#tokens) that play structural Symbols are a general class of printable [tokens](#tokens) that play structural
roles in a variety of grammar productions. They are catalogued here for roles in a variety of grammar productions. They are catalogued here for
completeness as the set of remaining miscellaneous printable tokens that do not completeness as the set of remaining miscellaneous printable tokens that do not
otherwise appear as [unary operators](#unary-operator-expressions), [binary otherwise appear as [unary operators](#unary-operator-expressions), [binary

View file

@ -23,6 +23,31 @@ match x {
This prints `one`. This prints `one`.
Theres one pitfall with patterns: like anything that introduces a new binding,
they introduce shadowing. For example:
```rust
let x = 'x';
let c = 'c';
match c {
x => println!("x: {} c: {}", x, c),
}
println!("x: {}", x)
```
This prints:
```text
x: c c: c
x: x
```
In other words, `x =>` matches the pattern and introduces a new binding named
`x` thats in scope for the match arm. Because we already have a binding named
`x`, this new `x` shadows it.
# Multiple patterns # Multiple patterns
You can match multiple patterns with `|`: You can match multiple patterns with `|`:

View file

@ -492,3 +492,32 @@ If we forget to implement `Foo`, Rust will tell us:
```text ```text
error: the trait `main::Foo` is not implemented for the type `main::Baz` [E0277] error: the trait `main::Foo` is not implemented for the type `main::Baz` [E0277]
``` ```
# Deriving
Implementing traits like `Debug` and `Default` over and over again can become
quite tedious. For that reason, Rust provides an [attribute][attributes] that
allows you to let Rust automatically implement traits for you:
```rust
#[derive(Debug)]
struct Foo;
fn main() {
println!("{:?}", Foo);
}
```
[attributes]: attributes.html
However, deriving is limited to a certain set of traits:
- [`Clone`](../core/clone/trait.Clone.html)
- [`Copy`](../core/marker/trait.Copy.html)
- [`Debug`](../core/fmt/trait.Debug.html)
- [`Default`](../core/default/trait.Default.html)
- [`Eq`](../core/cmp/trait.Eq.html)
- [`Hash`](../core/hash/trait.Hash.html)
- [`Ord`](../core/cmp/trait.Ord.html)
- [`PartialEq`](../core/cmp/trait.PartialEq.html)
- [`PartialOrd`](../core/cmp/trait.PartialOrd.html)

View file

@ -935,7 +935,7 @@ pub trait Iterator {
/// Creates an iterator that clones the elements it yields. /// Creates an iterator that clones the elements it yields.
/// ///
/// This is useful for converting an Iterator<&T> to an Iterator<T>, /// This is useful for converting an `Iterator<&T>` to an`Iterator<T>`,
/// so it's a more convenient form of `map(|&x| x)`. /// so it's a more convenient form of `map(|&x| x)`.
/// ///
/// # Examples /// # Examples

View file

@ -285,7 +285,12 @@ impl<'a> CompilerCalls<'a> for RustcDefaultCalls {
-> Compilation { -> Compilation {
match matches.opt_str("explain") { match matches.opt_str("explain") {
Some(ref code) => { Some(ref code) => {
match descriptions.find_description(&code[..]) { let normalised = if !code.starts_with("E") {
format!("E{0:0>4}", code)
} else {
code.to_string()
};
match descriptions.find_description(&normalised) {
Some(ref description) => { Some(ref description) => {
// Slice off the leading newline and print. // Slice off the leading newline and print.
print!("{}", &description[1..]); print!("{}", &description[1..]);

View file

@ -1308,8 +1308,8 @@ extern "rust-intrinsic" {
"##, "##,
E0101: r##" E0101: r##"
You hit this error because the compiler the compiler lacks information You hit this error because the compiler lacks the information to
to determine a type for this expression. Erroneous code example: determine a type for this expression. Erroneous code example:
``` ```
fn main() { fn main() {