attr
Source: compiler/src/builtin_docs/keywords.md Declares an attribute macro: attr name(FnDecl f, …) -> Code { … }.
It runs at compile time on the item marked #[name(…)] (a function, method,
class or enum) and its output replaces that item. The first parameter is a
FnDecl or TypeDecl; the others bind the attribute’s arguments. A module
cannot use its own macros: import them from a provider module.
use macro::{FnDecl, Code, raw};
/// Keeps the function and adds a `name_twice` wrapper.
attr twice(FnDecl f) -> Code {
return quote items {
${raw(f.source)}
fn ${raw(f.name.str())}_twice() -> int {
return ${raw(f.name.str())}() * 2;
}
};
}
See also#
fn: Declares a function, a method, or (written in an expression) an anonymous function.let: Declares a mutable local variable.const: Declares a binding that cannot be reassigned: a local, a module constant, or a class field that is set only bynew.static: Declares a module-level or class-level slot shared by the whole program, or a method withoutself.readonly: A read-only view of a value: nothing reachable through it can be changed.if: Runs a block when aboolcondition is true.else: Introduces the branch of anifthat runs when its condition is false (or its pattern does not match).while: Repeats a block while aboolcondition is true.