快速上手
RHILEX 使用了 Lua 虚拟机作为规则执行引擎,可以很方便的扩展 RHILEX 的功能。目前支持的函数以及其示例均包含在该站点,方便用户查阅使用。
RHILEX 在 2 个地方使用了 Lua,第一个场景是数据处理,主要用在设备上面,称之为规则 Lua;另一处是独立的 Lua 脚本执行器,用来实现更加强大的业务逻辑,称之为应用开发 Lua,而此处主要讲解针对数据处理的场景。
提前准备
RHILEX Lua 使用标准标准 Lua 5.3,没有对 Lua 标准语法做任何修改,所以为了尽快掌握 RHILEX Lua 扩展,建议大家先提前学习标准 Lua 的语法,下面给出几个常用的学习网站。
- Lua 官网:https://www.LUA.org/pil/1.html (opens in a new tab)
- 菜鸟 Lua:https://www.runoob.com/LUA/LUA-tutorial.html (opens in a new tab)
为了安全,RHILEX Lua 删除了 Lua 的原始 OS、string 模块。因此建议所有函数均使用 RHILEX Lua 提供的接口。
命名空间
RHILEX RULE 有专门的命名空间,参考下面的表格
| 命名空间 | 功能 | 示例 | 
|---|---|---|
| data | 数据处理 | data:ToUdp('uuid', data) | 
| stdlib | 标准库 | stdlib:Debug("ok") | 
| rpc | RPC 调用 | rpc:Request('uuid', data) | 
| binary | 二进制处理 | binary:ToUint(bin_data) | 
| url | URL 处理 | url:Parse(" https://www.hootrhino.com") | 
| time | 时间处理 | time:Sleep(1000) | 
| kv | 内部 KV 存储器 | kv:VSet("k","v") | 
| json | JSON 编解码 | json:T2J(name = "name") | 
| rule | 规则辅助 | rule:SelfId() | 
| device | 设备交互 | device:Read(data) | 
| string | 字符串处理 | string:SubStr("12345",0,1) | 
| hex | 十六进制处理 | hex:ABCD(data) | 
| aibase | AI 接口 | aibase:Infer(data) | 
| math | 数学库 | math:pow(1,1) | 
上面给出的列表可能会随着版本改变而变动,需要及时获取和关注社区最新通知。
RHILEX Actions
RHILEX Lua 包含 1 个回调: Actions,本身是 Lua 的一个 Table 结构,其元素为 function(arg) 列表,如下所示:
Actions =
{
    function(data)
        return true, data
    end
}需要注意的是 Actions 是个函数列表,可以实现链式回调,所以 Actions 可以这么写:
Actions =
{
    function(data)
        return true, data
    end,
    function(data)
        return true, data
    end,
    function(data)
        return true, data
    end
}上面的例子包含了 3 个处理流程,会顺序执行,将上一个函数的执行结果交给下一个的参数,其中 return 的第一个值表示是否向下传递。如果是 false 则短路直接返回。
十分钟学 Lua
Lua 是一种轻量级的脚本语言,广泛用于游戏开发、嵌入式设备和其他各种应用程序中。本教程将带你快速了解 Lua 的基础语法库,让你在 30 分钟内入门 Lua 编程。
注释
在 Lua 中,你可以使用 -- 来进行单行注释,也可以使用 --[[ ]]-- 来进行多行注释。
-- 这是单行注释
 
--[[
这是
多行
注释
--]]变量和数据类型
Lua 中的变量无需显式声明类型,直接赋值即可创建变量。Lua 有 8 种基本数据类型:nil、boolean、number、string、userdata、function、thread、table。
-- 定义变量并赋值
local num = 10
local str = "Hello, Lua!"
local flag = true
 
-- 输出变量
print(num)
print(str)
print(flag)控制流程
1. 条件语句
Lua 使用 if-elseif-else 结构来实现条件判断。
local num = 10
 
if num > 0 then
    print("num是正数")
elseif num < 0 then
    print("num是负数")
else
    print("num是零")
end2. 循环语句
Lua 提供了 while 循环和 for 循环。
-- while循环
local i = 1
while i <= 5 do
    print(i)
    i = i + 1
end
 
-- for循环
for j = 1, 5 do
    print(j)
end函数
在 Lua 中,函数是第一类值,可以存储在变量中,也可以作为参数传递给其他函数。
-- 定义函数
function add(a, b)
    return a + b
end
 
-- 调用函数
local result = add(3, 5)
print(result) -- 输出 8表(Table)
表是 Lua 中的一种复合数据类型,可以用来表示数组、字典等数据结构。
-- 创建表
local student = {
    name = "Alice",
    age = 20,
    grade = "A"
}
 
-- 访问表中的元素
print(student.name)  -- 输出 Alice
print(student.age)   -- 输出 20
print(student.grade) -- 输出 A字符串操作
Lua 提供了丰富的字符串操作函数,如字符串连接、查找、替换等。
local str1 = "Hello"
local str2 = "Lua"
 
-- 字符串连接
local result = str1 .. ", " .. str2
print(result) -- 输出 Hello, Lua
 
-- 字符串长度
print(#str1) -- 输出 5
 
-- 查找子串
local index = string.find(result, "Lua")
print(index) -- 输出 8这就是 Lua 的基础语法库。通过本教程,你应该对 Lua 的基本语法有了初步的了解。继续学习更多高级特性和应用场景,你将能够更灵活地运用 Lua 进行编程。