游戏人生
首页
(current)
GameDevTools
登陆
|
注册
个人中心
注销
Lua 教程
Lua 教程
Lua 编辑器安装
Lua 变量
Lua 数据类型
Lua 循环
Lua 流程控制
Lua 函数
Lua 运算符
Lua 字符串
Lua 数组
Lua 迭代器
Lua table(表)
Lua 模块(module)
Lua 文法 BNF范式
Lua 实例
<< Lua 函数
Lua 字符串 >>
Lua 运算符
运算符就是用来做运算的符号,最常见的 加减乘除(+,-,*,/)。 Lua编程语言包括以下几种运算符: - 算术运算符 - 关系运算符 - 逻辑运算符 - 字符串连接符 .. - 获取长度符# ------------ ####算术运算符 lua中的算术运算符有以下几种,注意看表格中的实例。 设A=10,B=20。 |操作符|描述|实例 | :------------ | :------------ | |+|加法|A + B 输出结果 30<br> |-|减法|A - B 输出结果 -10<br> |*|乘法|A * B 输出结果 200<br> |/|除法|B / A 输出结果 2<br> |%|取余|B % A 输出结果 0<br> |^|乘幂|A^2 输出结果 100<br> |-|负号|-A 输出结果 -10 #####实例 ```lua a = 21 b = 10 c = a + b print("Line 1 - c 的值为 ", c ) c = a - b print("Line 2 - c 的值为 ", c ) c = a * b print("Line 3 - c 的值为 ", c ) c = a / b print("Line 4 - c 的值为 ", c ) c = a % b print("Line 5 - c 的值为 ", c ) c = a^2 print("Line 6 - c 的值为 ", c ) c = -a print("Line 7 - c 的值为 ", c ) ``` 输出结果 Line 1 - c 的值为 31 Line 2 - c 的值为 11 Line 3 - c 的值为 210 Line 4 - c 的值为 2.1 Line 5 - c 的值为 1 Line 6 - c 的值为 441 Line 7 - c 的值为 -21 ------------ ####关系运算符 关系运算符就是比较,常见的就是 大于小于等于不等于。 表格中是 Lua 编程语言中的关系运算符,设 A 的值为100,B 的值为 200。 |操作符|描述|实例 | :------------ | :------------ | |==|等于,检测两个值是否相等,相等返回 true,否则返回 false|(A == B) 为 false。<br> |~=|不等于,检测两个值是否相等,相等返回 false,否则返回 true|(A ~= B) 为 true。<br> |>|大于,如果左边的值大于右边的值,返回 true,否则返回 false|(A > B) 为 false。<br> |<|小于,如果左边的值大于右边的值,返回 false,否则返回 true|(A < B) 为 true。<br> |>=|大于等于,如果左边的值大于等于右边的值,返回 true,否则返回 false|(A >= B) 返回 false。<br> |<=|小于等于, 如果左边的值小于等于右边的值,返回 true,否则返回 false|(A <= B) 返回 true。 #####实例 ```lua a = 21 b = 10 if( a == b ) then print("Line 1 - a 等于 b" ) else print("Line 1 - a 不等于 b" ) end if( a ~= b ) then print("Line 2 - a 不等于 b" ) else print("Line 2 - a 等于 b" ) end if ( a < b ) then print("Line 3 - a 小于 b" ) else print("Line 3 - a 大于等于 b" ) end if ( a > b ) then print("Line 4 - a 大于 b" ) else print("Line 5 - a 小于等于 b" ) end -- 修改 a 和 b 的值 a = 5 b = 20 if ( a <= b ) then print("Line 5 - a 小于等于 b" ) end if ( b >= a ) then print("Line 6 - b 大于等于 a" ) end ``` 输出结果 Line 1 - a 不等于 b Line 2 - a 不等于 b Line 3 - a 大于等于 b Line 4 - a 大于 b Line 5 - a 小于等于 b Line 6 - b 大于等于 a ------------ ####逻辑运算符 以怪物追着玩家砍为例,当怪物血量很低 并且 玩家血量很高 的时候,怪物表示溜了溜了。 `并且` 就是逻辑运算符。 Lua 编程语言中的逻辑运算符如下,设定 A 的值为 true,B 的值为 false: |操作符|描述|实例 | :------------ | :------------ | |and|逻辑与操作符。 若 A 为 false,则返回 A,否则返回 B。|(A and B) 为 false。<br> |or|逻辑或操作符。 若 A 为 true,则返回 A,否则返回 B。|(A or B) 为 true。<br> |not|逻辑非操作符。与逻辑运算结果相反,如果条件为 true,逻辑非为 false。|not(A and B) 为 true。  来看下面的例子 #####实例 ```lua a = true b = true if ( a and b ) then print("a and b - 条件为 true" ) end if ( a or b ) then print("a or b - 条件为 true" ) end print("---------分割线---------" ) -- 修改 a 和 b 的值 a = false b = true if ( a and b ) then print("a and b - 条件为 true" ) else print("a and b - 条件为 false" ) end if ( not( a and b) ) then print("not( a and b) - 条件为 true" ) else print("not( a and b) - 条件为 false" ) end ``` 输出结果 a and b - 条件为 true a or b - 条件为 true ---------分割线--------- a and b - 条件为 false not( a and b) - 条件为 true ------------ ####字符串连接符 在前面的教程中,我们已经接触过字符串连接符 `..`,字符串连接符的作用就是拼接字符串。 例如下面的代码 ```lua ---获取拼接的字符串 function GetOneStr(...) local tmpRetStr="" for i, v in ipairs{...} do --> {...} 表示一个由所有变长参数构成的数组 tmpRetStr = tmpRetStr .. v end return tmpRetStr end print(GetOneStr("a","b")) ``` 这个例子,使用字符串连接符 `..` 将传入的参数拼接在一起。 输出结果 ab ------------ ####获取长度符# `#` 在Lua中,是用来获取长度的,例如获取字符串的长度。 ```lua ---lua获取字符串长度 print(#"www.thisisgame.com.cn") ``` 输出结果 21 ------------ ####运算符优先顺序 从高到低的顺序: ^ not - (unary) * / + - .. < > <= >= ~= == and or 除了 ^ 和 .. 外所有的二元运算符都是左连接的。 ```lua a+i < b/2+1 效果为 (a+i) < ((b/2)+1) 5+x^2*8 效果为 5+((x^2)*8) a < y and y <= z 效果为 (a < y) and (y <= z) -x^2 效果为 -(x^2) x^y^z 效果为 x^(y^z) ``` #####实例 我们可以通过以下实例来更加透彻的了解 Lua 语言运算符的优先级: ```lua a = 20 b = 10 c = 15 d = 5 e = (a + b) * c / d;-- ( 30 * 15 ) / 5 print("(a + b) * c / d 运算值为 :",e ) e = ((a + b) * c) / d; -- (30 * 15 ) / 5 print("((a + b) * c) / d 运算值为 :",e ) e = (a + b) * (c / d);-- (30) * (15/5) print("(a + b) * (c / d) 运算值为 :",e ) e = a + (b * c) / d; -- 20 + (150/5) print("a + (b * c) / d 运算值为 :",e ) ``` 输出结果: (a + b) * c / d 运算值为 : 90.0 ((a + b) * c) / d 运算值为 : 90.0 (a + b) * (c / d) 运算值为 : 90.0 a + (b * c) / d 运算值为 : 50.0 ####运算符的结合性 运算符的结合性是指相同优先级的运算符在同一个表达式中,且没有括号的时候,运算符和操作数的结合方式,通常有从左到右结合和从右到左结合两种方式。 #####实例 设~是一个运算符,又有表达式a~b~c。 如果~是左结合的,那么该表达式被解析为(a~b)~c 如果~是右结合的,那么该表达式将被解析为a~(b~c) 比如三目运算符?:是从右向左结合的,那么下面的表达式a > b ? b > c ? 1 : 0 : 2将被解析为 a > b ? (b > c ? 1 : 0) : 2。
<< Lua 函数
Lua 字符串 >>
tableA = {name,age,address} ---tableA 类的声明 function tableA:New() ---构造方法 local obj = {} ---定义一个新的函数 setmetatable(obj, tableA) ---设置主表ojb tableA.__index = tableA ---设置子表的索引 return obj ---返回主表对象 end --类中的方法 function tableA:Walk() print(self.name..'正在走向'..self.address) ---self的作用类似于C#中的this,特指这个类中的成员 end --创建hero对象,实例化Person hero = tableA:New() --为对象中的字段赋值 hero.name = 'maliao' hero.age = 20 hero.address = '魔王城堡' --调用对象中的字段 print(hero.name) print(hero.age) print(hero.address) --调用对象中方法,调用方法时 hero:Walk()
Rectangle = {area = o, length = 0, breadth = 0} function Rectangle:new(o,length,breadth) o = o or {} local self = {} setmetatable(o,self) ---设置主表0 self.__index = self ---设置子表索引 self.length = length or 0 self.breadth = breadth or 0 self.area = length * breadth return o end function Rectangle:PrintArea() print("矩形的面积为:",self.area) end A = Rectangle:new(nil,10,20) print("底面积为:",A.area)
local Ar = require("Rectangle_area") local area = A.area Rectangle_volume = {volume = v,height = 0} function Rectangle_volume.new(v ,height) v = v or {} local self = {} setmetatable(v, self) self.__index = self self.height = height or 0 self.volume = area * height return v end function Rectangle_volume.Print() print("长方体的体积为:",self.volume) end Vo = Rectangle_volume.new(nil,10) print("长方体的体积为:",Vo.volume)
提交
5e3e47b9498b3f154caa6373