lua学习笔记

1、Lua的保留字

and     break    do     else   elseif
end     false    for     function   if
in     local    nil     not     or
repeat   return   then   true   until 
while

注意:Lua 是大小写敏感的.
注释:单行注释:--
多行注释:--[[    --]]

2、Lua 8种基本类型

nil、boolean、number、string、userdata、function 、thread 和table

2.1、Booleans:除了false 和nil为假,其他值都为真。所以 Lua 认为0 和空串都是真

2.2、Numbers:4   0.4  4.57e-3  0.3e12  5e+20

2.3、Strings:可以使用单引号或者双引号表示字符串

转义序列:

\a bell
\b back space       --  后退
\f form Feed      --  换页
\n newline       --  换行
\r carriage return      --  回车
\t horizontal tab     --  制表
\v vertical tab
\\ backslash       -- "\"
\" double quote        --  双引号
\' single quote        --  单引号
\[ left square bracket     --  左中括号
\] right square bracket    --  右中括号

字符串中使用\ddd (ddd 为三位十进制数字)方式表示字母

使用[[...]]表示字符串。这种形式的字符串可以包含多行也,可以嵌套且不会解释转义序列

Lua 会自动在string 和numbers 之间自动进行类型转换:

print("10" + 1)        --> 11

print(10 .. 20)    --> 1020

tonumber()、tostring()

3、关系运算符

nil只和自己相等

Lua 通过引用比较 tables 、userdata、functions 。也就是说当且仅当两者表示同一个对象时相等

a = {}; a.x = 1; a.y = 0
b = {}; b.x = 1; b.y = 0
c = a
a==c but a~=b

特别注意:

"0"  == 0    -- false
2 < 15     -- true
"2"  <  "15"   -- false (alphabetical order!)

为了避免不一致的结果,混合比较数字和字符串,Lua 会报错,比如:2 < "15"

4、逻辑运算符

a and  b    --  如果a 为false ,则返回 a,否则返回 b
a or  b    --  如果a 为true,则返回 a,否则返回 b

一个很实用的技巧:如果x 为false 或者nil则给x 赋初始值v

x = x or v

C 语言中的三元运算符a ? b : c,在Lua中是(a  and  b) or c

not 的结果一直返回 false 或者true

5、连接运算符

..     --两个点

6、优先级

从高到低的顺序:

^
not  - (unary)
*   /
+   -
..
<  >  <=  >=  ~=  ==
and
or

7、表的构造

days = { "Sunday","Monday","Tuesday","Wednesday",  "Thursday","Friday","Saturday" }

print(days[4])   --> Wednesday

一个元素的索引为1

如果想初始化一个表作为record 使用可以这样:

a = {x=0,y=0}    <-->    a = {}; a.x=0; a.y=0 

list 风格初始化和 record 风格初始化是这种一般初始化的特例:

{x=0,y=0}   <-->  {["x" ]=0,["y" ]=0}
{"red","green","blue"}   <-->  {[1]="red",[2]="green",[3]="blue"}

8、赋值语句

a,b = 10,2*x    <-->    a=10; b=2*x

x,y = y,x            -- swap 'x' for 'y'

当变量个数和值的个数不一致时,Lua 会一直以变量个数为基础采取以下策略:

变量个数>值的个数     按变量个数补足 nil

 变量个数<值的个数     多余的值会被忽略

9、局部变量与代码

local 创建一个局部变量

我们给block划定一个明确的界限:do..end 内的部分

10、控制结构语句

10.1、if 语句,有三种形式:

if conditions then 
 then-part
end ;
 
if conditions then 
 then-part
else
 else-part
end ;
 
if conditions then 
 then-part
elseif conditions then
 elseif-part
..     --->多个elseif
else
 else-part
end ;

10.2、while语句

while  condition do
 statements;
end ;

10.3、repeat-until 语句

repeat
 statements;
until  conditions;

10.4、for 语句有两大类

数值for循环

for  var=exp1,exp2,exp3  do
 loop-part
end

控制变量 var 是局部变量自动被声明,并且只在循环内有效

范型for 循环

for  i,v  in ipairs(a) do print(v)  end

10.5 break和return语句

Lua 语法要求 break和return 只能出现在 block的结尾一句(也就是说:作为 chunk
的最后一句,或者在end 之前,或者 else 前,或者 until 前)

11、函数

function  func_name (arguments-list)
 statements-list;
end ;

可以使用圆括号强制使调用返回一个值。

print((foo0()))   --> nil
print((foo1()))   --> a
print((foo2()))   --> a

特殊函数unpack ,接受一个数组作为输入参数,返回数组的所有元素

虚变量(下划线)

local  _,x = string.find(s,p)

还可以利用可变参数声明一个select 函数

print(select(1,string.find( "hello hello"," hel"))) --> 6 print(select(2," hel"))) --> 9

相关文章

1.github代码实践源代码是lua脚本语言,下载th之后运行thmai...
此文为搬运帖,原帖地址https://www.cnblogs.com/zwywilliam/...
Rime输入法通过定义lua文件,可以实现获取当前时间日期的功能...
localfunctiongenerate_action(params)localscale_action=cc...
2022年1月11日13:57:45 官方:https://opm.openresty.org/官...
在Lua中的table(表),就像c#中的HashMap(哈希表),key和...