#脚本语言 #插件 #脚本 #脚本引擎 #过程宏

macro 无 std rhai_codegen

Rhai 的过程宏支持包,Rhai 是 Rust 的脚本语言和引擎

24 个版本 (13 个稳定版)

2.2.0 2024 年 7 月 4 日
2.0.0 2024 年 2 月 2 日
1.17.0 2024 年 1 月 31 日
1.6.0 2023 年 9 月 9 日
0.3.0 2020 年 11 月 23 日

969嵌入式开发

Download history 20755/week @ 2024-04-29 23922/week @ 2024-05-06 23042/week @ 2024-05-13 21387/week @ 2024-05-20 19454/week @ 2024-05-27 23869/week @ 2024-06-03 21579/week @ 2024-06-10 22873/week @ 2024-06-17 21789/week @ 2024-06-24 19655/week @ 2024-07-01 22946/week @ 2024-07-08 23687/week @ 2024-07-15 23756/week @ 2024-07-22 23403/week @ 2024-07-29 24683/week @ 2024-08-05 21984/week @ 2024-08-12

95,003 每月下载量
用于 157 个 Crates (2 个直接使用)

MIT/Apache

260KB
6.5K SLoC

插件的过程宏

Rhai logo

此包包含用于代码生成的过程宏,支持 Rhai 的插件系统。

此包由 Rhai 包 自动引用。通常不应直接使用。


lib.rs:

此包包含用于使创建 Rhai 插件模块更加容易的过程宏。

将整个 Rust 模块导出到 Rhai Module

use rhai::{EvalAltResult, FLOAT};
use rhai::plugin::*;
use rhai::module_resolvers::*;

#[export_module]
mod advanced_math {
    pub const MYSTIC_NUMBER: FLOAT = 42.0;

    pub fn euclidean_distance(x1: FLOAT, y1: FLOAT, x2: FLOAT, y2: FLOAT) -> FLOAT {
        ((y2 - y1).abs().powf(2.0) + (x2 -x1).abs().powf(2.0)).sqrt()
    }
}

let mut engine = Engine::new();
let m = exported_module!(advanced_math);
let mut r = StaticModuleResolver::new();
r.insert("Math::Advanced", m);
engine.set_module_resolver(r);

assert_eq!(engine.eval::<FLOAT>(
    r#"
        import "Math::Advanced" as math;
        math::euclidean_distance(0.0, 1.0, 0.0, math::MYSTIC_NUMBER)
    "#)?, 41.0);

依赖项

~250–700KB
~17K SLoC