5 个版本
0.2.1 | 2021 年 7 月 10 日 |
---|---|
0.2.0 | 2019 年 10 月 18 日 |
0.1.2 | 2019 年 7 月 23 日 |
0.1.1 | 2018 年 7 月 20 日 |
0.1.0 | 2018 年 7 月 20 日 |
#1608 在 Rust 模式
330 每月下载量
用于 11 个 包(2 个直接使用)
15KB
255 行
metatype
辅助方法以确定类型是否为 TraitObject
、Slice
或 Concrete
,并分别与之交互。
示例
assert_eq!(usize::METATYPE, MetaType::Concrete);
assert_eq!(any::Any::METATYPE, MetaType::TraitObject);
assert_eq!(<[u8]>::METATYPE, MetaType::Slice);
let a: Box<usize> = Box::new(123);
assert_eq!(Type::meta_type(&*a), MetaType::Concrete);
let a: Box<dyn any::Any> = a;
assert_eq!(Type::meta_type(&*a), MetaType::TraitObject);
let a = [123,456];
assert_eq!(Type::meta_type(&a), MetaType::Concrete);
let a: &[i32] = &a;
assert_eq!(Type::meta_type(a), MetaType::Slice);
let a: Box<dyn any::Any> = Box::new(123);
let meta: TraitObject = type_coerce(Type::meta(&*a));
println!("vtable: {:?}", meta.vtable);
注意
当前需要 Rust nightly 版本以使用 raw
、specialization
和 arbitrary_self_types
功能。
许可证
根据以下任一许可证授权:
- Apache 许可证第 2 版,(LICENSE-APACHE.txt 或 http://www.apache.org/licenses/LICENSE-2.0)
- MIT 许可证 (LICENSE-MIT.txt 或 http://opensource.org/licenses/MIT)
供您选择。
除非您明确说明,否则您有意提交以包含在作品中的任何贡献,根据 Apache-2.0 许可证定义,应按上述方式双重许可,而无需任何附加条款或条件。