10个版本 (4个重大更新)

0.4.1 2024年6月10日
0.4.0 2024年6月7日
0.3.1 2024年6月4日
0.2.3 2024年5月19日
0.0.0 2024年5月8日

#617 in 算法

MIT许可协议

92KB
3K SLoC

anyrust

GitHub license

一个提供与JavaScript一样灵活和强大的类型系统的库。

使用方法

使用简单直观。你只需将值装箱到anyrust::Any类型中,并适当使用。

下面是一个简单示例。

use anyrust::*;

fn main() {
    let a = any(5);
    let b = any("10");
    let result = a + b;

    println!("result: {result}"); // result: 510
}

原始类型

基本整数类型、基本浮点类型、布尔类型和字符串类型与Any互转没有任何问题。

数组

数组通过anyrust::Array类型支持。这与Vec兼容。

    let mut arr = array![1, 2, 3, 4, 5];
    arr.push(4444);
    arr.push("foo");

    for e in arr {
        println!("{e}");
    }

映射

键值映射通过anyrust::Map类型支持。这与HashMap兼容。

    let mut map = map!{
        "name" => "John Doe", 
        "age" => 30,
    };
    map.set("is_adult", true);

    println!("{}", map.to_string());

    for (k, v) in map.to_map() {
        println!("{}: {}", k, v);
    }

函数

函数类型通过Function类型提供。你可以使用function!宏轻松创建它。

    let add = function!(lhs, rhs => {
        lhs + rhs
    });

    let result = add.call(array![1, 2]);
    println!("Result: {}", result);

    let four: Any = function!( => {
        let sum = any(4444);
        sum
    });

    let result = four.call(array![]);
    println!("Result: {}", result);

你也可以通过>>操作符使用函数组合。

    let add = function!(lhs, rhs => {
        println!("lhs: {}, rhs: {}", lhs, rhs);
        lhs + rhs
    });

    let negative = function!(num => {
        num * any(-1)
    });

    let composite = add >> negative;

    let result = composite.call(params![1, 2]);

    println!("Result: {}", result); // -3

依赖

~24KB