Trait std::any::Any 1.0.0[−][src]
Expand description
A trait to emulate dynamic typing.
Most types implement Any. However, any type which contains a non-'static reference does not.
See the module-level documentation for more details.
Required methods
Implementations
Returns some reference to the inner value if it is of type T, or
None if it isn’t.
Examples
use std::any::Any;
fn print_if_string(s: &dyn Any) {
if let Some(string) = s.downcast_ref::<String>() {
println!("It's a string({}): '{}'", string.len(), string);
} else {
println!("Not a string...");
}
}
print_if_string(&0);
print_if_string(&"cookie monster".to_string());RunReturns some mutable reference to the inner value if it is of type T, or
None if it isn’t.
Examples
use std::any::Any;
fn modify_if_u32(s: &mut dyn Any) {
if let Some(num) = s.downcast_mut::<u32>() {
*num = 42;
}
}
let mut x = 10u32;
let mut s = "starlord".to_string();
modify_if_u32(&mut x);
modify_if_u32(&mut s);
assert_eq!(x, 42);
assert_eq!(&s, "starlord");RunReturns a reference to the inner value as type dyn T.
Examples
#![feature(downcast_unchecked)]
use std::any::Any;
let x: Box<dyn Any> = Box::new(1_usize);
unsafe {
assert_eq!(*x.downcast_ref_unchecked::<usize>(), 1);
}RunSafety
The contained value must be of type T. Calling this method
with the incorrect type is undefined behavior.
Returns a mutable reference to the inner value as type dyn T.
Examples
#![feature(downcast_unchecked)]
use std::any::Any;
let mut x: Box<dyn Any> = Box::new(1_usize);
unsafe {
*x.downcast_mut_unchecked::<usize>() += 1;
}
assert_eq!(*x.downcast_ref::<usize>().unwrap(), 2);RunSafety
The contained value must be of type T. Calling this method
with the incorrect type is undefined behavior.
Forwards to the method defined on the type dyn Any.
Examples
use std::any::Any;
fn print_if_string(s: &(dyn Any + Send)) {
if let Some(string) = s.downcast_ref::<String>() {
println!("It's a string({}): '{}'", string.len(), string);
} else {
println!("Not a string...");
}
}
print_if_string(&0);
print_if_string(&"cookie monster".to_string());RunForwards to the method defined on the type dyn Any.
Examples
use std::any::Any;
fn modify_if_u32(s: &mut (dyn Any + Send)) {
if let Some(num) = s.downcast_mut::<u32>() {
*num = 42;
}
}
let mut x = 10u32;
let mut s = "starlord".to_string();
modify_if_u32(&mut x);
modify_if_u32(&mut s);
assert_eq!(x, 42);
assert_eq!(&s, "starlord");RunForwards to the method defined on the type dyn Any.
Examples
#![feature(downcast_unchecked)]
use std::any::Any;
let mut x: Box<dyn Any> = Box::new(1_usize);
unsafe {
*x.downcast_mut_unchecked::<usize>() += 1;
}
assert_eq!(*x.downcast_ref::<usize>().unwrap(), 2);RunSafety
Same as the method on the type dyn Any.
Forwards to the method defined on the type Any.
Examples
use std::any::Any;
fn print_if_string(s: &(dyn Any + Send + Sync)) {
if let Some(string) = s.downcast_ref::<String>() {
println!("It's a string({}): '{}'", string.len(), string);
} else {
println!("Not a string...");
}
}
print_if_string(&0);
print_if_string(&"cookie monster".to_string());RunForwards to the method defined on the type Any.
Examples
use std::any::Any;
fn modify_if_u32(s: &mut (dyn Any + Send + Sync)) {
if let Some(num) = s.downcast_mut::<u32>() {
*num = 42;
}
}
let mut x = 10u32;
let mut s = "starlord".to_string();
modify_if_u32(&mut x);
modify_if_u32(&mut s);
assert_eq!(x, 42);
assert_eq!(&s, "starlord");Run