10 个版本

使用旧的 Rust 2015

0.4.3 2018 年 8 月 24 日
0.4.2 2018 年 1 月 17 日
0.4.1 2017 年 12 月 6 日
0.4.0 2017 年 2 月 13 日
0.1.1 2016 年 11 月 16 日

#23 in #expr

Download history 335/week @ 2024-03-14 314/week @ 2024-03-21 356/week @ 2024-03-28 250/week @ 2024-04-04 242/week @ 2024-04-11 269/week @ 2024-04-18 310/week @ 2024-04-25 266/week @ 2024-05-02 231/week @ 2024-05-09 307/week @ 2024-05-16 293/week @ 2024-05-23 294/week @ 2024-05-30 385/week @ 2024-06-06 460/week @ 2024-06-13 222/week @ 2024-06-20 272/week @ 2024-06-27

1,383 每月下载量
用于 13 个包 (12 直接)

MIT 许可证

76KB
2K SLoC

eval

Project Status: Active - The project has reached a stable, usable state and is being actively developed. docs

Eval 是一个强大的表达式评估器。

文档

功能

支持的运算符: ! != "" '' () [] , > < >= <= == + - * / % && || n..m.

内置函数: min() max() len() is_empty() array().

Eval 可用于何处?

  • 模板引擎
  • ...

使用方法

将依赖添加到 Cargo.toml

[dependencies]
eval = "^0.4"

在你的 main.rslib.rs

extern crate eval;

示例

您可以使用支持的运算符进行数学计算

use eval::{eval, to_value};

assert_eq!(eval("1 + 2 + 3"), Ok(to_value(6)));
assert_eq!(eval("2 * 2 + 3"), Ok(to_value(7)));
assert_eq!(eval("2 / 2 + 3"), Ok(to_value(4.0)));
assert_eq!(eval("2 / 2 + 3 / 3"), Ok(to_value(2.0)));

您可以在上下文中使用 eval

use eval::{Expr, to_value};

assert_eq!(Expr::new("foo == bar")
               .value("foo", true)
               .value("bar", true)
               .exec(),
           Ok(to_value(true)));

您可以通过使用 .[] 访问数据,就像 JavaScript 一样。 [] 支持表达式。

use eval::{Expr, to_value};
use std::collections::HashMap;

let mut object = HashMap::new();
object.insert("foos", vec!["Hello", "world", "!"]);

assert_eq!(Expr::new("object.foos[1-1] == 'Hello'")
               .value("object", object)
               .exec(),
           Ok(to_value(true)));

您可以使用函数进行 eval

use eval::{Expr, to_value};

assert_eq!(Expr::new("say_hello()")
               .function("say_hello", |_| Ok(to_value("Hello world!")))
               .exec(),
           Ok(to_value("Hello world!")));

您可以使用 array() 创建数组

use eval::{eval, to_value};

assert_eq!(eval("array(1, 2, 3, 4, 5)"), Ok(to_value(vec![1, 2, 3, 4, 5])));

您可以使用 n..m 创建一个整数数组。

use eval::{eval, to_value};

assert_eq!(eval("0..5"), Ok(to_value(vec![0, 1, 2, 3, 4])));

许可证

eval 主要在 MIT 许可证的条款下分发。有关详细信息,请参阅 LICENSE

依赖关系

~0.8–1MB
~23K SLoC