#Lua

Lua 是一种轻量小巧的脚本语言,其设计目的是为了嵌入应用程序中,从而为应用程序提供灵活的扩展和定制功能。详情参阅Lua 教程

在LIMS系统中,无需进行lua环境的安装搭建,只需在编辑器(win系统推荐notepad++)中写好再粘贴到网页中即可,甚至可以直接在网页中直接编写。

无论有没有写过Lua的经历,都推荐通读下此文章,进阶中提到的,也是期望您全部理解

##基础

###注释

两个减号是单行注释:

--自定义脚本

###标示符

Lua 标示符用于定义一个变量。标示符以一个字母 A 到 Z 或 a 到 z 或下划线 _ 开头后 加上0个或多个字母,下划线,数字(0到9)。

赋值是改变一个变量的值和改变表域的最基本的方法。

1
2
3
>a = "hello" .. "world"
>t.n = t.n + 1
>

LIMS中的自定义脚本只关注于几个结果:

  • 预约自定义脚本只关注于can_reserv (boolean)err_msg (string)两个变量

    _can_reservtrue时,当前用户操作(添加、编辑、删除)预约有效,当为false时,操作无效,并提示err_msg信息_

    Demo:

    1
    2
    3

    can_resrv = false
    err_msg = "不约不约,叔叔我们不约"
  • 计费自定义脚本只关注于fee (number)description (string)两个变量

    fee为此次计费金额,description为计费备注(当计费不为0时必须)

    Demo:

    1
    2
    3
    --开机费20块,使用每小时免费
    fee = 20
    description = T("<p>原价1百多,2百多,3百多的钱包,通通20块</p>")

###流程控制

Lua 编程语言流程控制语句通过程序设定一个或多个条件语句来设定。在条件为 true 时执行指定程序代码,在条件为 false 时执行其他指定代码。LIMS中的Lua脚本高频使用if进行流程控制

  • if语句及elseif语句后要加thenelse后不用。
  • 闭合if要用end语句。
  • 强烈建议缩进规范。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    a = 100

    if ( a <= 10 )
    then
    print("a 小于 10")
    elseif ( a == 10 )
    then
    print("a 的值为 10")
    else
    print("a 大于 10")
    end

进阶:if语句一定要覆盖全部可能性。以预约脚本为例:

1
2
3
4
5
6
7
8
9
10
--校内用户的预约开始时间,只能是每天八点后
can_resrv = false

if ( user_tag("校内") ) then
if (dateT(start_time)['hour'] >= 8 ) then
can_reserv = true
else
err_msg = "校内用户的预约开始时间,只能是每天八点后";
end
end

这段虽然保存到LIMS时不会报错,可是当非校内用户预约时,会得到“自定义脚本未知错误”的提示

###Lua 运算符

运算符是一个特殊的符号,用于告诉解释器执行特定的数学或逻辑运算。
Lua提供了以下几种运算符类型:

  • 算术运算符
  • 关系运算符
  • 逻辑运算符
  • 其他运算符

必要了解的运算符:== and or not .. #(#后面会有使用示例)

Lua 运算符 已经介绍得非常详细了,不再赘述。

###Lua 函数

编写LIMS使用到的Lua脚本时,我们很少在Lua中定义函数。Lua 提供了许多的内建函数,足以满足需求,更重要的是,LIMS为Lua脚本开放了许多函数,Lua脚本中只要调用就好了。

进阶:內建函数推荐了解下math库

LIMS中脚本具体可以使用哪些函数,详见下一篇教程LIMS开放的Lua函数

##结语

  • 掌握此篇设计到的知识后,即可独立完成90%以上的Lua脚本编写。
  • 如果遇到功能,不清楚能否实现、如何实现,请阅读LIMS开放的Lua函数
  • 如果本篇有知识遗漏或者错误,欢迎随时联系作者。
  • 如果想再深入了解Lua,甚至可以细读Lua 5.3 参考手册