1
Fork 0

Update macro invocation syntax in documentation.

This commit is contained in:
Paul Stansifer 2012-08-22 17:44:14 -07:00
parent 29f32b4a72
commit 345363866c
2 changed files with 19 additions and 19 deletions

View file

@ -2254,10 +2254,10 @@ log(core::error, ~"file not found: " + filename);
log(error, ~"file not found: " + filename); log(error, ~"file not found: " + filename);
// Formatting the message using a format-string and #fmt // Formatting the message using a format-string and #fmt
log(error, #fmt("file not found: %s", filename)); log(error, fmt!("file not found: %s", filename));
// Using the #error macro, that expands to the previous call. // Using the #error macro, that expands to the previous call.
#error("file not found: %s", filename); error!("file not found: %s", filename);
~~~~ ~~~~
A `log` expression is *not evaluated* when logging at the specified A `log` expression is *not evaluated* when logging at the specified
@ -2328,7 +2328,7 @@ and the syntax to expand into. An example:
#macro([#apply[fn, [args, ...]], fn(args, ...)]); #macro([#apply[fn, [args, ...]], fn(args, ...)]);
~~~~~~~~ ~~~~~~~~
In this case, the invocation `#apply[sum, 5, 8, 6]` expands to In this case, the invocation `apply!(sum, 5, 8, 6)` expands to
`sum(5,8,6)`. If `...` follows an expression (which need not be as `sum(5,8,6)`. If `...` follows an expression (which need not be as
simple as a single identifier) in the input syntax, the matcher will expect an simple as a single identifier) in the input syntax, the matcher will expect an
arbitrary number of occurrences of the thing preceding it, and bind syntax to arbitrary number of occurrences of the thing preceding it, and bind syntax to
@ -2348,12 +2348,12 @@ sophisticated example:
#macro([#unzip_literals[[x, y], ...], [[x, ...], [y, ...]]]); #macro([#unzip_literals[[x, y], ...], [[x, ...], [y, ...]]]);
~~~~~~~~ ~~~~~~~~
In this case, `#zip_literals[[1,2,3], [1,2,3]]` expands to In this case, `zip_literals!([1,2,3], [1,2,3])` expands to
`[[1,1],[2,2],[3,3]]`, and `#unzip_literals[[1,1], [2,2], [3,3]]` `[[1,1],[2,2],[3,3]]`, and `unzip_literals!([1,1], [2,2], [3,3])`
expands to `[[1,2,3],[1,2,3]]`. expands to `[[1,2,3],[1,2,3]]`.
Macro expansion takes place outside-in: that is, Macro expansion takes place outside-in: that is,
`#unzip_literals[#zip_literals[[1,2,3],[1,2,3]]]` will fail because `unzip_literals!(zip_literals!([1,2,3],[1,2,3]))` will fail because
`unzip_literals` expects a list, not a macro invocation, as an argument. `unzip_literals` expects a list, not a macro invocation, as an argument.
The macro system currently has some limitations. It's not possible to The macro system currently has some limitations. It's not possible to

View file

@ -100,7 +100,7 @@ fn main() {
// Report the results as the games complete // Report the results as the games complete
for range(0, times) |round| { for range(0, times) |round| {
let winner = result_from_game.recv(); let winner = result_from_game.recv();
println(#fmt("%s wins round #%u", winner, round)); println(fmt!("%s wins round #%u", winner, round));
} }
fn play_game(player1: ~str, player2: ~str) -> ~str { fn play_game(player1: ~str, player2: ~str) -> ~str {
@ -650,7 +650,7 @@ one is `#fmt`, a printf-style text formatting macro that is expanded
at compile time. at compile time.
~~~~ ~~~~
io::println(#fmt("%s is %d", ~"the answer", 42)); io::println(fmt!("%s is %d", ~"the answer", 42));
~~~~ ~~~~
`#fmt` supports most of the directives that [printf][pf] supports, but `#fmt` supports most of the directives that [printf][pf] supports, but
@ -664,7 +664,7 @@ All syntax extensions look like `#word`. Another built-in one is
compile-time. compile-time.
~~~~ ~~~~
io::println(#env("PATH")); io::println(env!("PATH"));
~~~~ ~~~~
# Control structures # Control structures
@ -908,8 +908,8 @@ and will log the formatted string:
~~~~ ~~~~
# fn get_error_string() -> ~str { ~"boo" } # fn get_error_string() -> ~str { ~"boo" }
#warn("only %d seconds remaining", 10); warn!("only %d seconds remaining", 10);
#error("fatal: %s", get_error_string()); error!("fatal: %s", get_error_string());
~~~~ ~~~~
Because the macros `#debug`, `#warn`, and `#error` expand to calls to `log`, Because the macros `#debug`, `#warn`, and `#error` expand to calls to `log`,
@ -1578,7 +1578,7 @@ the enclosing scope.
fn call_closure_with_ten(b: fn(int)) { b(10); } fn call_closure_with_ten(b: fn(int)) { b(10); }
let captured_var = 20; let captured_var = 20;
let closure = |arg| println(#fmt("captured_var=%d, arg=%d", captured_var, arg)); let closure = |arg| println(fmt!("captured_var=%d, arg=%d", captured_var, arg));
call_closure_with_ten(closure); call_closure_with_ten(closure);
~~~~ ~~~~
@ -1706,7 +1706,7 @@ structure.
# fn each(v: ~[int], op: fn(int)) {} # fn each(v: ~[int], op: fn(int)) {}
# fn do_some_work(i: int) { } # fn do_some_work(i: int) { }
each(~[1, 2, 3], |n| { each(~[1, 2, 3], |n| {
#debug("%i", n); debug!("%i", n);
do_some_work(n); do_some_work(n);
}); });
~~~~ ~~~~
@ -1718,7 +1718,7 @@ call that can be written more like a built-in control structure:
# fn each(v: ~[int], op: fn(int)) {} # fn each(v: ~[int], op: fn(int)) {}
# fn do_some_work(i: int) { } # fn do_some_work(i: int) { }
do each(~[1, 2, 3]) |n| { do each(~[1, 2, 3]) |n| {
#debug("%i", n); debug!("%i", n);
do_some_work(n); do_some_work(n);
} }
~~~~ ~~~~
@ -1735,7 +1735,7 @@ takes a final closure argument.
import task::spawn; import task::spawn;
do spawn() || { do spawn() || {
#debug("I'm a task, whatever"); debug!("I'm a task, whatever");
} }
~~~~ ~~~~
@ -1746,7 +1746,7 @@ there?
~~~~ ~~~~
# import task::spawn; # import task::spawn;
do spawn { do spawn {
#debug("Kablam!"); debug!("Kablam!");
} }
~~~~ ~~~~
@ -2558,7 +2558,7 @@ extern mod crypto {
fn as_hex(data: ~[u8]) -> ~str { fn as_hex(data: ~[u8]) -> ~str {
let mut acc = ~""; let mut acc = ~"";
for data.each |byte| { acc += #fmt("%02x", byte as uint); } for data.each |byte| { acc += fmt!("%02x", byte as uint); }
return acc; return acc;
} }
@ -2759,7 +2759,7 @@ fn unix_time_in_microseconds() -> u64 unsafe {
return (x.tv_sec as u64) * 1000_000_u64 + (x.tv_usec as u64); return (x.tv_sec as u64) * 1000_000_u64 + (x.tv_usec as u64);
} }
# fn main() { assert #fmt("%?", unix_time_in_microseconds()) != ~""; } # fn main() { assert fmt!("%?", unix_time_in_microseconds()) != ~""; }
~~~~ ~~~~
The `#[nolink]` attribute indicates that there's no foreign library to The `#[nolink]` attribute indicates that there's no foreign library to
@ -2799,7 +2799,7 @@ let some_value = 22;
do spawn { do spawn {
println(~"This executes in the child task."); println(~"This executes in the child task.");
println(#fmt("%d", some_value)); println(fmt!("%d", some_value));
} }
~~~~ ~~~~