快速上手
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是零")
end
2. 循环语句
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 进行编程。