rhai 基础之数值计算和格式化

2022-06-30 16:24:38 浏览数 (1)

临近除夕夜,首先给各位朋友拜年了:祝您牛年心想事成,身体健康!

笔者最近在项目中对于 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,以作详细了解。

0 人点赞