Module any
Utilities for dynamic typing or type reflection.
Any and TypeId
Any itself can be used to get a TypeId, and has more features when used
as a trait object. As &dyn Any (a borrowed trait object), it has the is
and downcast_ref methods, to test if the contained value is of a given type,
and to get a reference to the inner value as a type. As &mut dyn Any, there
is also the downcast_mut method, for getting a mutable reference to the
inner value. Box<dyn Any> adds the downcast method, which attempts to
convert to a Box<T>. See the Box documentation for the full details.
Note that &dyn Any is limited to testing whether a value is of a specified
concrete type, and cannot be used to test whether a type implements a trait.
Smart pointers and dyn Any
One piece of behavior to keep in mind when using Any as a trait object,
especially with types like Box<dyn Any> or Arc<dyn Any>, is that simply
calling .type_id() on the value will produce the TypeId of the
container, not the underlying trait object. This can be avoided by
converting the smart pointer into a &dyn Any instead, which will return
the object's TypeId. For example:
use ;
let boxed: = Boxnew;
// You're more likely to want this:
let actual_id = .type_id;
// ... than this:
let boxed_id = boxed.type_id;
assert_eq!;
assert_eq!;
Examples
Consider a situation where we want to log a value passed to a function.
We know the value we're working on implements Debug, but we don't know its
concrete type. We want to give special treatment to certain types: in this
case printing out the length of String values prior to their value.
We don't know the concrete type of our value at compile time, so we need to
use runtime reflection instead.
use Debug;
use Any;
// Logger function for any type that implements `Debug`.
// This function wants to log its parameter out prior to doing work with it.
Structs
-
TypeId
A
TypeIdrepresents a globally unique identifier for a type.
Traits
- Any A trait to emulate dynamic typing.
Functions
-
try_as_dyn
Returns
Some(&U)ifTcan be coerced to the trait object typeU. Otherwise, it returnsNone. -
try_as_dyn_mut
Returns
Some(&mut U)ifTcan be coerced to the trait object typeU. Otherwise, it returnsNone. - type_name Returns the name of a type as a string slice.
- type_name_of_val Returns the type name of the pointed-to value as a string slice.