19个版本 (4个重大变更)
使用旧的Rust 2015
0.4.4 | 2015年1月4日 |
---|---|
0.4.3 | 2015年1月3日 |
0.4.1 | 2014年12月28日 |
0.3.0 | 2014年12月28日 |
0.0.3 | 2014年12月9日 |
#15 in #factory
用于 di
43KB
810 代码行,不包括注释
MetaFactory
在运行时从lambda表达式和其他来源构建值工厂链。
快速示例
use metafactory::{ metafactory, argless_as_factory, AsFactoryExt };
fn main() {
// initialization
let meta_sum = metafactory(
|a: int, b: int| a + b
);
let meta_twice = metafactory(
|val: int| val * 2
);
// plugging in
let any_factory = meta_twice.new(vec![
meta_sum.new(vec![
argless_as_factory(3i),
argless_as_factory(2i),
]).ok().unwrap()
]).ok().unwrap();
// using
let getter = any_factory.as_factory_of::<int>().unwrap();
// note that "take" requires no arguments
assert_eq!(getter.take().value, 12);
}
提供对返回的工厂类型和参数的原始反射
let meta_int = metafactory(
|arg: bool| i32
);
// it knows the source returns 32-bit int
assert!(meta_int.get_type().is::<i32>());
// it knows the argument is bool
assert!(meta_int.get_arg_types().get(0).unwrap().is::<bool>());
用法
将以下内容放入您的 Cargo.toml
[dependencies]
metafactory = "*"
并在您的crate根目录中添加以下内容
extern crate metafactory;
资源
许可证
MIT
依赖项
~11KB