11个版本 (6个重大更新)
0.7.3 | 2022年8月1日 |
---|---|
0.7.1 | 2022年7月4日 |
0.4.1 | 2021年12月10日 |
0.4.0 | 2021年11月6日 |
0.1.0 | 2021年4月26日 |
#17 在 #meta
被 2 crates 使用
44KB
1K SLoC
🧬 FnMeta
在运行时返回函数的元数据。
目前这包括函数参数的 TypeId
。
这包括一个 FnMetadata
结构体和一个 FnMetadataExt
特性。 FnMetadataExt
在函数和闭包上添加了 .metadata()
函数,用于返回一个 FnMetadata
,其实施在运行时返回函数元数据。
用法
将以下内容添加到 Cargo.toml
fn_meta = "0.7.3"
# or
fn_meta = { version = "0.7.3", features = ["fn_meta_ext"] }
代码
use core::any::TypeId;
use fn_meta::{FnMetaDyn, FnMetadataExt};
fn f1(_: &S0, _: &mut S1, _: &S2) -> () {}
let fn_metadata = f1.metadata();
assert_eq!(
[TypeId::of::<S0>(), TypeId::of::<S2>()],
fn_metadata.borrows().as_slice()
);
assert_eq!([TypeId::of::<S1>()], fn_metadata.borrow_muts().as_slice());
struct S0;
struct S1;
struct S2;
功能
"fn_meta_ext"
:
启用 FnMeta
和 FnMetaExt
特性。 FnMetaExt
在函数和闭包上添加了 .meta()
函数,返回一个 Box<dyn FnMeta>
,它是 FnMetadata
的动态分派类似物。
"high_arg_count"
:
将 FnMetaExt
和 FnMetadataExt
的实现参数数量从6增加到8。
这因为随着参数数量的增加,编译时间显著增加,从6个参数的1.5秒增加到8个参数的8秒。
许可
许可如下
- Apache License,版本2.0,(LICENSE-APACHE 或 https://apache.ac.cn/licenses/LICENSE-2.0)
- MIT许可 (LICENSE-MIT 或 https://opensource.org/licenses/MIT)
任选其一。
贡献
除非您明确声明,否则根据 Apache-2.0 许可证定义的,任何有意提交以包含在作品中的贡献,都应如上双重许可,而不附加任何其他条款或条件。