#run-time #factory #reflection #constructor #invoke #lambda

nightly metafactory

Rust库,用于通过lambda表达式和其他来源在运行时链接对象工厂

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

MIT 许可证

43KB
810 代码行,不包括注释

MetaFactory

在运行时从lambda表达式和其他来源构建值工厂链。

Build Status

快速示例

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