[−][src]Macro nameof::name_of
Takes a binding, type, or function as an argument and returns its
unqualified string representation. If the identifier does not exist
in the current context, the macro will cause a compilation error.
This macro is mainly intended for debugging purposes and to improve
the refactoring experience compared to plain stringify!()
.
The syntax depends on the type of the identifier:
-
Bindings to variables and functions require no annotation, e.g.
name_of!(some_binding)
. -
Types and structs require the keyword
type
, e.g.name_of!(type SomeType)
. Alternatively, the macroname_of_type!(SomeType)
may be used. -
Fields within structs are referred to with the
in
keyword, e.g.name_of!(some_field in SomeType)
.
Examples
struct TestStruct { test_field: i32, } struct GenericStruct<T> { test_field_t: T, } fn greet() -> &'static str { "Hi, World" } let text = "Hello, World!"; println!("Binding `{}` holds `{}`.", name_of!(text), text); println!("Function `{}` says `{}`.", name_of!(greet), greet()); println!( "Struct `{}` has a field `{}`.", name_of!(type TestStruct), name_of!(test_field in TestStruct) ); println!( "Generic Struct `{}` has a field `{}`.", name_of!(type GenericStruct<String>), name_of!(test_field_t in GenericStruct<String>) ); println!( "Standard types such as `{}` and `{}` also work.", name_of!(type i32), name_of!(type f64) );