BeWithYou

胡搞的技术博客

  1. 首页
  2. C/C++/Lua
  3. Lua学习笔记(一)

Lua学习笔记(一)


ueditor语法高亮的插件没有lua的,暂时用erlang代替下。后面看看有没有办法改下。


语法:

每个语句结尾的分号是可选的,但是如果同一行有多个语句,最好用分号隔开。

命令行交互模式下用os.exit()或者文件结束符退出。

不加local声明和定义全局变量。没有初始化的变量值为nil。删除一个变量,直接置为nil即可。

大小写敏感。

单行注释 两个减号 —。多行注释 —[[ —]]

命令行运行lua脚本文件时,arg中可以读取参数列表。脚本名为0,参数往后。


变量:

8个基本类型:nil boolean number string userdata function thread table。

nil 是值 nil 的类型, 其主要特征就是和其它值区别开。通常用来表示一个有意义的值不存在时的状态。

只有false和nil在控制接口中为假。0和""都是真。和PHP不一样。

number 代表了整数和实数(浮点数)。lua可以高效的处理长整数。

string表示一个不可变的字节序列。 Lua 对 8 位是友好的: 字符串可以容纳任意 8 位值, 其中包含零 ('\0') 。 Lua 的字符串与编码无关; 它不关心字符串中具体内容。lua是8字节的,可以高效处理长字符串。长字符串用[[…]]来标记。

string和number和自动转换。number后面需要加连接操作的时候,要空格。

table中key和value都可以放任何类型的变量。下标默认从1开始。a.b相当于a[“b”]。初始化时a={[1]=“abc”},下标为1需要加[],否则就变成字符串的1了。a={name=“hehe”,age=21;tag=“x”}这样用逗号分隔,也可以用分号分隔。

userdata 类型允许将 C 中的数据保存在 Lua 变量中。

thread 类型表示了一个独立的执行序列,被用于实现协程。

表、函数、线程、以及完全用户数据在 Lua 中被称为 对象: 变量并不真的持有它们的值,而仅保存了对这些对象的引用。赋值、参数传递、函数返回,都是针对引用而不是针对值的操作, 这些操作均不会做任何形式的隐式拷贝

用type来确定变量或值的类型。


变量赋值:

可以用逗号分隔 a,b,c = 0,1 数目不足时nil补齐 数目太多时省略。

所以交换变量的值就可以 a,b=b,a了。

局部变量的使用范围很严格。比如while循环中声明的local变量,作用范围只在while循环内部有效。


条件判断:

不等于运算符用 ~= 不是!=。

逻辑运算符用 and or not 不用&& || !。

三元运算符可以用 a and b or c来实现。相当于C语言的 a?b:c。


控制结构:

if xxx then
…
elseif xxx then
…
else
…
end

while xxx do
…
end

repeat
…
until xxx

for i=a,b,c do — i从a开始到b,每次步长为c c可不写默认为1
…
end

for i,v in pairs(t) do — i和v表示pairs中的key和value 有序数组用ipairs 后面还会讲到迭代器相关
…
end


lua要求break和return只能出现在block的最后一行。所以我们调试的时候,不能提前return。(不人性化啊)

如果非要像上面那样提前return,可以这么做。用do return end来标记。

function foo ()
return --<< SYNTAX ERROR
-- 'return' is the last statement in the next block 
do return end -- OK
... -- statements not reached
end


   

回到顶部