Lua学习笔记之lua基本语法DAY1

来源:互联网 发布:手机屏幕养兔子软件 编辑:程序博客网 时间:2024/05/22 11:16

1注释:

①单行注释:两个减号是单行注释。

eg. --

②多行注释:--[[多行注释

多行注释

]]--


2.标示符:Lua标示符用于定义一个变量,函数获取其他用户定义的项。标示符以一个字母A到Z或a到z或下划线_开头后加上0个或多个字母、下划线、数字(0到9).

Lua不允许使用特殊字符如@,$和%来定义标示符。Lua是一个区分大小写的编程预言。

3.关键字:以下列出Lua的保留关键字。保留关键字不能作为常量或变量或其他用户自定义标识符。

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

一般约定,以下划线开头连接一串大写字母的(如_VERSIOIN)被保留用于lua内部全局变量。如_G是当前的环境变量。

4.全局变量:在默认情况下,变量总认为是全局的。全局变量不需要声明,给一个变量赋值后即创建了这个全局变量,访问一个没有初始化的全局变量也不会出错,只不过得到的结果是nil.

所以如果你想删除一个全局变量,只需要将变量赋值为nil.

5.Lua有8种基本类型,分别是string(字符串)、number(数字)、function(函数)、boolean(布尔类型)、nil(空)、thread、userdata。前面六种我们可以通过函数type进行测试,并用print输出。如下图所示:


6.nil类型:Lua中特殊的类型,它只有一个值:nil。一个全局变量没有被赋值以前默认值为nil;给全局变量赋值为nil,可以删除该变量。

7.boolean类型:两个取值false和true.在控制结构的条件中除了false和nil为假,其他值都为真。所以Lua认为0和空串都是真。

8.number类型:表示实数、整数和浮点类型的都属于number.

9.string类型:指字符的序列。Lua是8位字节,所以字符串可以包含任何数值字符。string和其他对象一样,Lua自动给进行内存分配和释放。对于字符串内含有引号的情况还可以使用转义符\来表示。


*Lua会自动在string和numbers之间自动进行类型转换。如果是数值字符串(如'10')可以通过tonumber函数进行显示转换,如果不为数值字符串那么调用此函数会返回nil。

*如果字符串遇到算术运算符,则会转换为数值进行运算。


*number类型可以通过tostring()来实现向字符串类型的转换 。eg. print(tostring(10) == "10") -->输出true--

10.运算符

1>算术运算符:二元运算符(+、*、/、^)、一元运算符:-(负值),这些运算符的操作数都是实数。

2>关系运算符:>、<、<=、>=、==、~=

*nil只和自己相等;

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


3>逻辑运算符:and or not.逻辑运算符认为false 和 nil是假(false),其他为真,0也是true.and 和 or的运算结果不是true和false,而是和它的两个操作数相关。

*and的优先级比or的优先级高

*and 如果左边为真打印右边,如果左边为假打印左边

*or如果左边为真打印左边,如果左边为假打印右边

*a?b:c如果a为真则执行b,否则执行c。用and or代替可表示为(a and b) or c

11.语句:

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

所以我们可以通过赋值语句进行交换变量的值。

* 当变量和值的个数不一致时,Lua会以变量的个数为基础采取以下策略
  ①变量个数>值的个数 依次赋值,不足nil
   ②变量个数<值的个数 多余的值会被忽略

2>局部变量与代码块:使用local创建一个局部变量,与全局变量不同,局部变量只在被声明的那个代码块有效。


3>控制语句

if conditionsthen

then-part

end

②ifconditions then

then-part

elseifconditions then

elseif-part

```

else

else-part

end

③循环

for i=exp1,exp2,exp3 do

loop-part

end

即范围为[exp1,exp2],步长为exp3

12.函数:function与end成对出现,并且接受可变数目的参数,参数列表使用...表示函数有可变的参数。Lua将参数放在一个叫arg的表中,可通过#arg来活得参数的个数大小。另外,Lua函数中,return可以返回多值。


13.表(table)最简单的构造函数是{},可以直接化数组,也可通过键值对进行初始化(显式设置下标,使用#打印不出长度)。

标准库中提供了集中迭代器,其中 pairs 和 ipairs 会产生两种不同的迭代器, 一个仅仅遍历数组, 一个遍历所有的值。前者可以返回nil,后者遇到nil则退出,不管后面有没有值。

测试如下:

编译结果:

恩,ok

补充几个对于理解pairs和ipairs的例子,是从菜鸟教程摘录的哇下部分链接

pairs 和 ipairs异同

同:都是能遍历集合(表、数组)

异:ipairs 仅仅遍历值,按照索引升序遍历,索引中断停止遍历。即不能返回 nil,只能返回数字 0,如果遇到 nil 则退出。它只能遍历到集合中出现的第一个不是整数的 key。

pairs 能遍历集合的所有元素。即 pairs 可以遍历集合中所有的 key,并且除了迭代器本身以及遍历表本身还可以返回 nil。

栗子1:

local tabFiles = {        [1] = "test2",        [6] = "test3",        [4] = "test1"    }for k, v in ipairs(tabFiles) do    --输出"test2",在key等于2处断开    print(k, v)end

栗子2:

local tabFiles = {    [2] = "test2",    [6] = "test3",    [4] = "test1"}for k, v in ipairs(tabFiles) do  --[[什么都没输出,为什么?因为控制变量初始值是按升序来遍历的,当key1时,valuenil,此时便停止了遍历, 所有什么结果都没输出]]--    print(k, v)end

栗子3:

local tabFiles = {    [2] = "test2",    [6] = "test3",    [4] = "test1"}for k, v in pairs(tabFiles) do  --输出2 test2, 6 test3, 4 test1    print(k, v)end

栗子4:

local tabFiles = {"alpha", "beta", [3] = "no", ["two"] = "yes"}  for i,v in ipairs(tabFiles ) do    --输出前三个   备注:因为第四个key不是整数    print( tabFiles [i] )   end     for i,v in pairs(tabFiles ) do    --全部输出       print( tabFiles [i] )   end 


原创粉丝点击