doc: Document flavorful variations of paths

Closes #4293
This commit is contained in:
Alex Crichton 2014-04-07 14:34:56 -07:00
parent bc234ae130
commit c83afb9719

View File

@ -432,7 +432,7 @@ operators](#binary-operator-expressions), or [keywords](#keywords).
## Paths
~~~~ {.notrust .ebnf .gram}
expr_path : ident [ "::" expr_path_tail ] + ;
expr_path : [ "::" ] ident [ "::" expr_path_tail ] + ;
expr_path_tail : '<' type_expr [ ',' type_expr ] + '>'
| expr_path ;
@ -475,6 +475,51 @@ let x = id::<int>(10); // Type arguments used in a call expression
# }
~~~~
Paths can be denoted with various leading qualifiers to change the meaning of
how it is resolved:
* Paths starting with `::` are considered to be global paths where the
components of the path start being resolved from the crate root. Each
identifier in the path must resolve to an item.
```rust
mod a {
pub fn foo() {}
}
mod b {
pub fn foo() {
::a::foo(); // call a's foo function
}
}
# fn main() {}
```
* Paths starting with the keyword `super` begin resolution relative to the
parent module. Each further identifier must resolve to an item
```rust
mod a {
pub fn foo() {}
}
mod b {
pub fn foo() {
super::a::foo(); // call a's foo function
}
}
# fn main() {}
```
* Paths starting with the keyword `self` begin resolution relative to the
current module. Each further identifier must resolve to an item.
```rust
fn foo() {}
fn bar() {
self::foo();
}
# fn main() {}
```
# Syntax extensions
A number of minor features of Rust are not central enough to have their own