快速上手
RHILEX 使用了 Lua 虚拟机作为规则执行引擎,可以很方便的扩展 RHILEX 的功能。目前支持的函数以及其示例均包含在该站点,方便用户查阅使用。
RHILEX 在 2 个地方使用了 Lua,第一个场景是数据处理,主要用在设备上面,称之为规则 Lua;另一处是独立的 Lua 脚本执行器,用来实现更加强大的业务逻辑,称之为应用开发 Lua,而此处主要讲解针对数据处理的场景。
提前准备
RHILEX Lua 使用标准标准 Lua 5.3,没有对 Lua 标准语法做任何修改,所以为了尽快掌握 RHILEX Lua 扩展,建议大家先提前学习标准 Lua 的语法,下面给出几个常用的学习网站。
为了安全,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 进行编程。