临近除夕夜,首先给各位朋友拜年了:祝您牛年心想事成,身体健康!
笔者最近在项目中对于 Rust 语言的嵌入式脚本引擎 rhai 进行了些许应用,感觉对于从事 Rust 开发的朋友,引入 rhai crate 可以提高开发效率。如果您的 Rust 应用集中于互联网及其 web 开发方面,那么使用和 Rust 语法非常类似的 rhai 替代 JavaScript,可以提高开发效率和运行性能。
关于 rhai 的介绍,请参阅 Rhai - Rust 的嵌入式脚本引擎 和 Rhai 脚本引擎的简单应用示例 两篇图文。
rhai 语言中,和 Rust 类似,整数类型支持十进制、二进制、八进制,以及十六进制的标记符号。默认的整数类型(别名为 INT)是 i64。i64 可以通过 only_i32 转换为 i32。
rhai 也支持浮点数。默认的系统浮点类型是 f64(别名为 FLOAT)。f64 可以通过 f32_float 转换为 f32。
“_” 下划线分隔符可以自由添加,并且在数值中被忽略——除了在最开始位置或小数点(“.”)之后。
我们看一些示例:
格式 | 类型 |
---|---|
123_345, -42 | INT,十进制 |
0o07_76 | INT,八进制 |
0xabcd_ef | INT,十六进制 |
0b0101_1001 | INT,二进制 |
123_456.789, -42. | FLOAT |
rhai 的数值计算和操作,和 Rust 是基本相同的。基本的操作符,以及内置函数(如 sin、cos、abs、round 等等)都完全支持。
但格式化输出支持方面,进行了诸多删减。因为 rhai 是 no_std 的 Rust,目前不支持 Rust 中的 format、print/println、write 等宏操作。
但实际应用中,对于格式化输出是必须的基础要求。如果您是在 Rust 代码中嵌入 rhai 脚本,那么可以通过在 format、print/println、write 等宏中直接调用 rhai 的计算结果。
但如果您需要应用独立的 rhai 脚本替代诸如 JavaScript 等,以直接将其输出到 html 中,则需要有一些变通。比如,我想在模板或者 react、vue 中用 rhai 脚本替代部分 JavaScript,进行数值输出的格式化:将整数数值转换为以 k(1000)为单位的格式,并四舍五入,以及仅保留一位小数。在 Rust 代码中,直接调用 format 宏,然后进行格式化输出即可。在 rhai 中,我们仍然调用 Rust 的操作符以及内置函数,但输出格式需要一些变通。如下代码示例:
代码语言:javascript复制// 通过 html 传递需要计算的数值
let number = params[0];
if number < 1000 {
number
} else {
// 因为我们需要输出小数的格式,因此:
// 1、将 int 转换为 float;
// 2、先除以 100.0,然后四舍五入。
// 3、四舍五入后,类型仍然是 float(如123.0)。
// 4、再除以 10.0,输出即保留一位小数
(number.to_float() / 100.0).round() / 10.0 "k"
}
笔者对于 rhai 脚本引擎,虽然体验较多,但目前应用还是皮毛,此三篇图文仅为推荐。感兴趣的朋友可以访问网站:https://rhai.budshome.com,以作详细了解。