我是靠谱客的博主 坚定嚓茶,最近开发中收集的这篇文章主要介绍Lua基础(一)——赋值语句、表达式、流程控制、函数,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

转载自:http://blog.csdn.net/shimazhuge/article/details/10090677 

作者:ouyangshima

作者总结的很详细,很全面,可以做参考资料,转载过来,以防以后找不到了!



赋值语句

  • 注释,单行用(--)来表示;多行用(--[[ ... ]])来标示;
  • 定义,lua中没有定义(申明数据类型),它是通过赋值来确定其数据类型的。
  • 赋值,是改变一个变量的值和改变表域的最基本的方法。 a = "hello" .. "world"  

Lua可以对多个变量同时赋值,变量列表和值列表的各个元素用逗号分开,赋值语句右边的值会依次赋给左边的变量。a, b = 10, 2*x <--> a=10; b=2*x 

遇到赋值语句Lua会先计算右边所有的值然后再执行赋值操作,所以我们可以这样进行交换变量的值: 

[cpp]  view plain  copy
  1. x, y = y, x  -- swap 'x' for 'y'   
  2. a[i], a[j] = a[j], a[i]  -- swap 'a[i]' for 'a[i]'  

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

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

多值赋值经常用来交换变量,或将函数调用返回给变量: a, b = f() --f()返回两个值,第一个赋给a,第二个赋给b

表达式

表达式---是表达式就需要运算符。

1.算术运算符+-*/^(加减乘除幂,二元运算符),-(负值,一元运算符);操作跟C++一样

2.关系运算符<><=>===~=(不等于);这些操作符返回结果为false或者true;==和~=比较两个值,如果两个值类型不同,Lua认为两者不同nil只和自己相等Lua通过引用比较tables、userdata、functions。也就是说当且仅当两者表示同一个对象时相等。

[cpp]  view plain  copy
  1. print((2 < 15))   --true  
  2. print(("1" == 1)) --false  
  3. print(("2" > "15")) --true  
  4. a={};a.x=1;a.y=0;  
  5. b={};b.x=1;b.y=0;  
  6. print((a ~= b)); --true  
  7. c = a;  
  8. print((a == c)); --true  
  9. --Lua比较数字按传统的数字大小进行,比较字符串按字母的顺序进行,但是字母顺序依赖于本地环境。  
  10. --为了避免不一致的结果,混合比较数字和字符串,Lua会报错,比如:2 < "15"  

3.逻辑运算符andornot逻辑运算符认为falsenil是假(false),其他为真,0也是true. 

andor的运算结果不是truefalse,而是和它的两个操作数相关。a and b -- 如果afalse,则返回a,否则返回;a or b -- 如果atrue,则返回a,否则返回;想想堆栈,若第一个变量就可以判断出真假,就不需要判断第二个变量了。

and的优先级比or高。

C语言中的三元运算符,a ? b : c  ==>>在Lua中可以这样实现: (a and b) or c 

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

[cpp]  view plain  copy
  1. print(not nil) --> true   
  2. print(not false) --> true   
  3. print(not 0) --> false   
  4. print(not not nil) --> false   

4.连接运算符.. (两个点);如果操作数为数字,Lua将数字转成字符串。

[cpp]  view plain  copy
  1. print("Hello " .. "World") --> Hello World   
  2. print(0 .. 1) --> 01   

流程控制

控制结构的条件表达式结果可以是任何值,Lua认为false和nil为假,其他值为真。

do..end(相当于c/c++{}

if语句,有三种形式 

[cpp]  view plain  copy
  1. if conditions then  
  2.     then-part  
  3. end;  
  4. if conditions then  
  5.    then-part  
  6. else  
  7.    else-part  
  8. end;  
  9. if conditions then  
  10.    then-part  
  11. elseif conditions then  
  12.     elseif-part  
  13.    .. --->多个elseif  
  14. else  
  15.    else-part  
  16. end;  

由于Lua不支持switch语句,所以这种一连串的if-else if代码很常见的。

while语句

[cpp]  view plain  copy
  1. while condition do  
  2.    statements;  
  3. end;  

repeat-until语句

[cpp]  view plain  copy
  1. repeat  
  2.   statements;  
  3. until conditions;  

条件判断是在循环体之后做的,因此循环体至少会执行一次。类似于C++中的,do..while()

for语句

  • 数字型for(number for)

[cpp]  view plain  copy
  1. for var=exp1,exp2,exp3 do  
  2.     loop-part  
  3. end  
  4. --for将用exp3作为step从exp1(初始值)到exp2(终止值),执行loop-part。其中exp3可以省略,默认step=1  
  • 泛型for(generic for),泛型for循环通过一个迭代器(iterator)函数类遍历所有值。
[cpp]  view plain  copy
  1. --打印数组a的所有值  
  2. for i,v in ipairs(a) do print(v) end  

Lua的基础库提供了ipairs,这是一个用于遍历数组的迭代器函数。在每次循环中,i会被赋予一个索引值,同时v被赋予一个对应该索引的数组元素值。

[cpp]  view plain  copy
  1. 再看一个遍历表key的例子:   
  2. -- print all keys of table 't'   
  3. --for k in pairs(t) do print(k) end   
  4.       
  5. days = {"Sunday""Monday""Tuesday""Wednesday","Thursday""Friday""Saturday"}  
  6. revDays = {}  
  7. for i,v in pairs(days) do  
  8. revDays[v] = i  --revDays = {["Sunday"] = 1, ["Monday"] = 2,["Tuesday"] = 3, ["Wednesday"] = 4,["Thursday"] = 5, ["Friday"] = 6,["Saturday"] = 7}  
  9. end  
  10. --x = "Tuesday"  
  11. --print(revDays[x])--3  
  12.   
  13. for k in pairs(days) do print(k) end --1234567  
  14. for k in pairs(revDays) do print(k) end  

标准库提供了几种迭代器,包括用于迭代文件中每行的(io.lines)迭代table元素的(pairs)迭代数组元素的(ipairs)迭代字符串中单词的(string.gmatch)等。

break和return语句

函数

[cpp]  view plain  copy
  1. function foo(a, b, c)  
  2.    local sum = a + b  
  3.    return sum, c --函数可以返回多个值  
  4. end  
  5. r1, r2 = foo(1, '123''hello') --平行赋值  
  6. print(r1, r2) --124 hello  

  • 函数定义用关键字function定义函数,以关键字end结束
  • 局部变量:用关键字local定义。如果没有用local定义,即使在函数内部定义的变量也是全局变量!
  • 函数可以返回多个值:return a, b, c, ...
  • 平行赋值:a, b = c, d
  • 全局变量:前面的代码定义了三个全局变量:foor1r2

最后

以上就是坚定嚓茶为你收集整理的Lua基础(一)——赋值语句、表达式、流程控制、函数的全部内容,希望文章能够帮你解决Lua基础(一)——赋值语句、表达式、流程控制、函数所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(52)

评论列表共有 0 条评论

立即
投稿
返回
顶部