Lua 变量

变量在使用前,必须在代码中进行声明,即创建该变量。

编译程序执行代码之前编译器需要知道如何给语句变量开辟存储区,用于存储变量的值。

Lua 变量有三种类型:全局变量、局部变量、表中的域。

Lua 中的变量全是全局变量,那怕是语句块或是函数里,除非用 local 显式声明为局部变量。

局部变量的作用域为从声明位置开始到所在语句块结束。

变量的默认值均为 nil。

  1. -- test.lua 文件脚本
  2. a = -- 全局变量
  3. local b = -- 局部变量
  4.  
  5. function joke()
  6. c = -- 全局变量
  7. local d = -- 局部变量
  8. end
  9.  
  10. joke()
  11. print(c,d) --> nil
  12.  
  13. do
  14. local a = -- 局部变量
  15. b = -- 对局部变量重新赋值
  16. print(a,b); -->
  17. end
  18.  
  19. print(a,b) -->

赋值语句

赋值是改变一个变量的值和改变表域的最基本的方法。

  1. a = "hello" .. "world"
  2. t.n = t.n +

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

  1. a, b = , *x <--> a=; b=*x

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

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

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

  1. a. 变量个数 > 值的个数 按变量个数补足nil
  2. b. 变量个数 < 值的个数 多余的值会被忽略
  1. a, b, c = ,
  2. print(a,b,c) --> nil
  3.  
  4. a, b = a+, b+, b+ -- value of b+ is ignored
  5. print(a,b) -->
  6.  
  7. a, b, c =
  8. print(a,b,c) --> nil nil

Lua 循环

很多情况下我们需要做一些有规律性的重复操作,因此在程序中就需要重复执行某些语句。

一组被重复执行的语句称之为循环体,能否继续重复,决定循环的终止条件。

循环结构是在一定条件下反复执行某段程序的流程结构,被反复执行的程序被称为循环体。

循环语句是由循环体及循环的终止条件两部分组成的。

Lua 语言提供了以下几种循环处理方式:

循环类型 描述
while 循环 在条件为 true 时,让程序重复地执行某些语句。执行语句前会先检查条件是否为 true。
for 循环 重复执行指定语句,重复次数可在 for 语句中控制。
repeat...until 重复执行循环,直到 指定的条件为真时为止
循环嵌套 可以在循环内嵌套一个或多个循环语句(while do ... end;for ... do ... end;repeat ... until;)

循环控制语句

循环控制语句用于控制程序的流程, 以实现程序的各种结构方式。

Lua 支持以下循环控制语句:

无限循环

在循环体中如果条件永远为 true 循环语句就会永远执行下去,以下以 while 循环为例:

  1. while( true )
  2. do
  3. print("循环将永远执行下去")
  4. end

Lua 流程控制

Lua 编程语言流程控制语句通过程序设定一个或多个条件语句来设定。在条件为 true 时执行指定程序代码,在条件为 false 时执行其他指定代码。

以下是典型的流程控制流程图:

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

要注意的是Lua中 0 为 true:

  1. --[ true ]
  2. if()
  3. then
  4. print("0 为 true")
  5. end

Lua 函数

在Lua中,函数是对语句和表达式进行抽象的主要方法。既可以用来处理一些特殊的工作,也可以用来计算一些值。

Lua 提供了许多的内建函数,你可以很方便的在程序中调用它们,如print()函数可以将传入的参数打印在控制台上。

Lua 函数主要有两种用途:

  • 1.完成指定的任务,这种情况下函数作为调用语句使用;
  • 2.计算并返回值,这种情况下函数作为赋值语句的表达式使用。

函数定义

Lua 编程语言函数定义格式如下:

  1. optional_function_scope function function_name( argument1, argument2, argument3..., argumentn)
  2. function_body
  3. return result_params_comma_separated
  4. end
  1. --[[ 函数返回两个值的最大值 --]]
  2. function max(num1, num2)
  3.  
  4. if (num1 > num2) then
  5. result = num1;
  6. else
  7. result = num2;
  8. end
  9.  
  10. return result;
  11. end
  12. -- 调用函数
  13. print("两值比较最大值为 ",max(,))
  14. print("两值比较最大值为 ",max(,))

Lua 中我们可以将函数作为参数传递给函数,如下实例:

  1. myprint = function(param)
  2. print("这是打印函数 - ##",param,"##")
  3. end
  4.  
  5. function add(num1,num2,functionPrint)
  6. result = num1 + num2
  7. -- 调用传递的函数参数
  8. functionPrint(result)
  9. end
  10. myprint()
  11. -- myprint 函数作为参数传递
  12. add(,,myprint)

多返回值

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

  1. > s, e = string.find("www.runoob.com", "runoob")
  2. > print(s, e)

Lua函数中,在return后列出要返回的值的列表即可返回多值,如:

  1. function maximum (a)
  2. local mi = -- 最大值索引
  3. local m = a[mi] -- 最大值
  4. for i,val in ipairs(a) do
  5. if val > m then
  6. mi = i
  7. m = val
  8. end
  9. end
  10. return m, mi
  11. end
  12.  
  13. print(maximum({,,,,}))

可变参数

Lua 函数可以接受可变数目的参数,和 C 语言类似,在函数参数列表中使用三点 ... 表示函数有可变的参数。

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

我们可以将可变参数赋值给一个变量。

例如,我们计算几个数的平均值:

  1. function average(...)
  2. result =
  3. local arg={...} --> arg 为一个表,局部变量
  4. for i,v in ipairs(arg) do
  5. result = result + v
  6. end
  7. print("总共传入 " .. #arg .. " 个数")
  8. return result/#arg
  9. end
  10.  
  11. print("平均值为",average(,,,,,))
  1. function count(...)
  2. return select("#", ...)
  3. end
  4.  
  5. print(count(,,,,))

Lua 运算符

运算符是一个特殊的符号,用于告诉解释器执行特定的数学或逻辑运算。Lua提供了以下几种运算符类型:

  • 算术运算符
  • 关系运算符
  • 逻辑运算符
  • 其他运算符

算术运算符

下表列出了 Lua 语言中的常用算术运算符,设定 A 的值为10,B 的值为 20:

操作符 描述 实例
+ 加法 A + B 输出结果 30
- 减法 A - B 输出结果 -10
* 乘法 A * B 输出结果 200
/ 除法 B / A w输出结果 2
% 取余 B % A 输出结果 0
^ 乘幂 A^2 输出结果 100
- 负号 -A 输出结果 -10
  1. a =
  2. b =
  3. c = a + b
  4. print("Line 1 - c 的值为 ", c )
  5. c = a - b
  6. print("Line 2 - c 的值为 ", c )
  7. c = a * b
  8. print("Line 3 - c 的值为 ", c )
  9. c = a / b
  10. print("Line 4 - c 的值为 ", c )
  11. c = a % b
  12. print("Line 5 - c 的值为 ", c )
  13. c = a^
  14. print("Line 6 - c 的值为 ", c )
  15. c = -a
  16. print("Line 7 - c 的值为 ", c )

关系运算符

下表列出了 Lua 语言中的常用关系运算符,设定 A 的值为10,B 的值为 20:

  1. 操作符 描述 实例
  2. == 等于,检测两个值是否相等,相等返回 true,否则返回 false (A == B) false
  3. ~= 不等于,检测两个值是否相等,相等返回 false,否则返回 true (A ~= B) true
  4. > 大于,如果左边的值大于右边的值,返回 true,否则返回 false (A > B) false
  5. < 小于,如果左边的值大于右边的值,返回 false,否则返回 true (A < B) true
  6. >= 大于等于,如果左边的值大于等于右边的值,返回 true,否则返回 false (A >= B) 返回 false
  7. <= 小于等于, 如果左边的值小于等于右边的值,返回 true,否则返回 false (A <= B) 返回 true

实例

我们可以通过以下实例来更加透彻的理解关系运算符的应用:

  1. a =
  2. b =
  3.  
  4. if( a == b )
  5. then
  6. print("Line 1 - a 等于 b" )
  7. else
  8. print("Line 1 - a 不等于 b" )
  9. end
  10.  
  11. if( a ~= b )
  12. then
  13. print("Line 2 - a 不等于 b" )
  14. else
  15. print("Line 2 - a 等于 b" )
  16. end
  17.  
  18. if ( a < b )
  19. then
  20. print("Line 3 - a 小于 b" )
  21. else
  22. print("Line 3 - a 大于等于 b" )
  23. end
  24.  
  25. if ( a > b )
  26. then
  27. print("Line 4 - a 大于 b" )
  28. else
  29. print("Line 5 - a 小于等于 b" )
  30. end
  31.  
  32. -- 修改 a b 的值
  33. a =
  34. b =
  35. if ( a <= b )
  36. then
  37. print("Line 5 - a 小于等于 b" )
  38. end
  39.  
  40. if ( b >= a )
  41. then
  42. print("Line 6 - b 大于等于 a" )
  43. end

逻辑运算符

下表列出了 Lua 语言中的常用逻辑运算符,设定 A 的值为 true,B 的值为 false:

操作符 描述 实例
and 逻辑与操作符。 若 A 为 false,则返回 A,否则返回 B。 (A and B) 为 false。
or 逻辑或操作符。 若 A 为 true,则返回 A,否则返回 B。 (A or B) 为 true。
not 逻辑非操作符。与逻辑运算结果相反,如果条件为 true,逻辑非为 false。 not(A and B) 为 true。

实例

我们可以通过以下实例来更加透彻的理解逻辑运算符的应用:

实例

  1. a = true
  2. b = true
  3.  
  4. if ( a and b )
  5. then
  6. print("a and b - 条件为 true" )
  7. end
  8.  
  9. if ( a or b )
  10. then
  11. print("a or b - 条件为 true" )
  12. end
  13.  
  14. print("---------分割线---------" )
  15.  
  16. -- 修改 a b 的值
  17. a = false
  18. b = true
  19.  
  20. if ( a and b )
  21. then
  22. print("a and b - 条件为 true" )
  23. else
  24. print("a and b - 条件为 false" )
  25. end
  26.  
  27. if ( not( a and b) )
  28. then
  29. print("not( a and b) - 条件为 true" )
  30. else
  31. print("not( a and b) - 条件为 false" )
  32. end

其他运算符

下表列出了 Lua 语言中的连接运算符与计算表或字符串长度的运算符:

操作符 描述 实例
.. 连接两个字符串 a..b ,其中 a 为 "Hello " , b 为 "World", 输出结果为 "Hello World"。
# 一元运算符,返回字符串或表的长度。 #"Hello" 返回 5

实例

我们可以通过以下实例来更加透彻的理解连接运算符与计算表或字符串长度的运算符的应用:

  1. a = "Hello "
  2. b = "World"
  3.  
  4. print("连接字符串 a 和 b ", a..b )
  5.  
  6. print("b 字符串长度 ",#b )
  7.  
  8. print("字符串 Test 长度 ",#"Test" )
  9.  
  10. print("菜鸟教程网址长度 ",#"www.runoob.com" )

运算符优先级

从高到低的顺序:

  1. ^
  2. not - (unary)
  3. * /
  4. + -
  5. ..
  6. < > <= >= ~= ==
  7. and
  8. or

Lua语言基本语法~运算符的更多相关文章

  1. Lua 语言基本语法

    第一个 Lua 程序 .交互式编程 Lua 提供了交互式编程模式.我们可以在命令行中输入程序并立即查看效果. Lua 交互式编程模式可以通过命令 lua -i 或 lua 来启用 .脚本式编程 我们可 ...

  2. 【quick-cocos2d-x】Lua 语言基础

    版权声明:本文为博主原创文章,转载请注明出处. 使用quick-x开发游戏有两年时间了,quick-x是cocos2d-Lua的一个豪华升级版的框架,使用Lua编程.相比于C++,lua的开发确实快速 ...

  3. Lua脚本之语法基础快速入门

    要 1.基本数据类型 2.Lua中的常用语句结构以及函数 3.Lua中的常用语句结构介绍 4.Lua中的库函数 目录[-] 一.基本数据类型 二.Lua中的常用语句结构以及函数 1.Lua中的常用语句 ...

  4. lua语言三目运算符

    [1]lua语言中完整的三目运算符 完整三目运算符形式:(a and {b} or {c})[1] [2]分析原因 大部分C或C++程序员经常会用到三目运算符(三元运算符),形如 a ? b : c; ...

  5. Lua语言中文手册 转载自网络

    Programming in LuaCopyright ® 2005, Translation Team, www.luachina.net Programming in LuaProgramming ...

  6. 02. Go 语言基本语法

    Go语言基本语法 变量.数据类型和常量是编程中最常见,也是很好理解的概念.本章将从 Go 语言的变量开始,逐步介绍各种数据类型及常量. Go 语言在很多特性上和C语言非常相近.如果读者有C语言基础,那 ...

  7. 【转】让Souce Insight支持多种语言的语法高亮:Python,Ruby,ARM汇编,windows脚本文件(bat/batch),PPC,SQL,TCL,Delphi等

    原文网址:http://www.crifan.com/source_insight_support_highlight_for_python_ruby_arm_batch_ppc_sql_tcl_de ...

  8. Java语言基本语法

    Java语言基本语法 一.标识符和关键字 标识符 在java语言中,用来标志类名.对象名.变量名.方法名.类型名.数组名.包名的有效字符序列,称为“标识符”: 标识符由字母.数字.下划线.美元符号组成 ...

  9. Unity进阶----Lua语言知识点(2018/11/08)

    国内开发: 敏捷开发: 集中精力加班堆出来第一个版本 基本没啥大的bug 国外开发: 1).需求分析: 2).讨论 3).分模块 4).框架 5).画UML图(类图class function)(e- ...

随机推荐

  1. TYPES与DATA区别

    例如:int  a; "c语言定义 TYPES:BEGIN OF typ,   filed1 TYPE c,   END OF typ.         "相当于int类型 DAT ...

  2. 使用Navicat为Oracle导入函数后函数显示红叉

    上图是plsql中的截图 有可能是Navicat没有缓存过程,刷新试一试,不行的话,对导入的函数进行重新编译即可. 还发现一个问题是,Navicat导出的脚本里面,函数部分竟然没有参数和返回值,让我很 ...

  3. 面向对象编程(oop)的变迁

    作者:匿名用户链接:https://www.zhihu.com/question/34018003/answer/132740170来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请 ...

  4. C# 线程安全集合类

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/kang_xuan/article/de ...

  5. 【POJ - 3087】Shuffle'm Up(模拟)

    Shuffle'm Up 直接写中文了 Descriptions: 给定两个长度为len的字符串s1和s2, 接着给出一个长度为len*2的字符串s12. 将字符串s1和s2通过一定的变换变成s12, ...

  6. 1 初识数据库操作 1 MySQL 数据库

    1 数据类型与表的管理 数据库(Database)是按照数据结构来组织.存储和管理数据的仓库. 常见数据库:Oracle.DB2.SQL Server.Postgre SQL.MySQL. 1.1 相 ...

  7. WIN10远程协助无法控制的解决方法

    这个问题比较常见小编整理的解决方法如下: 方法一:用QQ远程协助对方电脑,需要QQ告诉对方右键单击计算机(这台电脑)点管理打开计算机管理界面选择本地用户和组,再选择用户,右侧会出现所有的本地用户,包括 ...

  8. 应用安全 - 编程语言 | 框架 - PHP - Djiango - 漏洞 -汇总

    CVE-2007-0404 Date , 类型Filename validation issue in translation framework. Full description 影响范围 CVE ...

  9. DDOS常见攻击类型和防御措施

    DDOS 攻击类型: SYN Flood 攻击 ACK Flood 攻击 UDP Flood 攻击 ICMP Flood 攻击 Connection Flood 攻击 HTTP Get 攻击 UDP ...

  10. mysql的授权命令

    #查看用户select user,host from mysql.user; (root,%),表示可以远程登录,并且是除服务器外的其他任何终端, 如CREATE USER 'azkaban'@'19 ...