Lua学习随笔

2k 词

昨天刚立了FLAG,今天就来还愿了。因为是工作中接触到的,已经用了几次,比较熟悉。昨晚在晚上大概搜了下,看了两个教程,看进去了,今早又看了将近两小时,看到了些基础的东西。

我是在Windows上练习LUA,所以只用下个软件就可以开始了,非常方便。下载入口

下载后安装即可,使用方法就是首先打开SciTE,然后在里面直接敲代码,保存为以lua结尾的文件,按F5就可以看到运行结果了。

首先是注释,单行注释是

--单行注释

多行注释:

--[[
多行注释
多行注释
--]]

lua中变量不需要声明类型,默认所有变量都是全局变量,如果需要局部变量,需要使用local显式声明。

a = 5               -- 全局变量
local b = 5         -- 局部变量

lua中两个点“..”表示对字符串进行连接

print("字符串1" .. “字符串2”)   --字符串1字符串2

Lua可以对多个变量同时赋值,变量列表和值列表的各个元素用逗号分开,赋值语句右边的值会依次赋给左边的变量。

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

当变量与值的个数不一致时:

a. 变量个数 > 值的个数             按变量个数补足nil
b. 变量个数 < 值的个数             多余的值会被忽略

对 table 的索引使用方括号 []。Lua 也提供了 . 操作。

t[i]
t.i                 -- 当索引为字符串类型时的一种简化写法
gettable_event(t,i) -- 采用索引访问本质上是一个类似这样的函数调用

在 Lua 里,table 的创建是通过”构造表达式”来完成,最简单构造表达式是{}

-- 创建一个空的 table
local tbl1 = {}

– 直接初始表
local tbl2 = {"apple", "pear", "orange", "grape"}

lua中的函数,可以类似变量进行互相赋值

function factorial1(n)
   if n == 0 then
       return 1
   else
       return n * factorial1(n - 1)
   end
end
print(factorial1(5))
factorial2 = factorial1
print(factorial2(5))

boolean 类型只有两个可选值:true(真) 和 false(假),Lua 把 false 和 nil 看作是”假”,其他的都为”真”:

Lua 编程语言中数值for循环语法格式:

for var=exp1,exp2,exp3 do  
    <执行体>  
end 

var 从 exp1 变化到 exp2,每次变化以 exp3 为步长递增 var,并执行一次 “执行体”。exp3 是可选的,如果不指定,默认为1。

lua有两种for循环,上面是第一种,称为数值for循环,可以理解为正常版for。还有一种是泛型for循环,类似于java中的foreach,利用迭代器实现for循环。

a = {"one", "two", "three"}
for i, v in ipairs(a) do
   print(i, v)
end 

i是数组索引值,v是对应索引的数组元素值。ipairs是Lua提供的一个迭代器函数,用来迭代数组。

Lua 编程语言中 repeat…until 循环语法格式:

repeat
  statements
until( condition )

循环条件判断语句(condition)在循环体末尾部分,所以在条件进行判断前循环体都会执行一次。

如果条件判断语句(condition)为 false,循环会重新开始执行,直到条件判断语句(condition)为 true 才会停止执行。

函数

lua函数使用function声明,默认为全局函数,如果要使用局部函数,类似于变量,在前面加个local即可。写法格式和平常的函数一样。lua中的函数可以作为参数传递给函数。

多返回值

Lua函数可以返回多个结果值,比如string.find,其返回匹配串”开始和结束的下标”(如果不存在匹配串返回nil)。

> s, e = string.find("www.runoob.com", "runoob") 
> print(s, e)
--输出结果:5    10

可变参数

function add(...)  
  local s = 0  
  for i, v in ipairs{...} do   --> {...} 表示一个由所有变长参数构成的数组  
     s = s + v  
  end  
  return s  
end  
print(add(3,4,5,6,7))  --->25

–select('#', …) 返回可变参数的长度
–select(n, …) 用于访问 n 到 select('#',…) 的参数

运算符

lua关系运算符中的不等于是“~=”

字符串连接符“..”

“#”返回字符串或表的长度