Lua教程(三):表达式和语句

2024-05-22

Lua教程(三):表达式和语句(通用3篇)

篇1:Lua教程(三):表达式和语句

这篇文章主要介绍了Lua教程(三):表达式和语句,本文讲解了算术操作符、关系操作符、逻辑操作符、字符串连接、table构造器、控制结构等内容,需要的朋友可以参考下

一、表达式:

1. 算术操作符:

Lua支持常规算术操作符有:二元的“+”、“-”、“*”、“/”、“^”(指数)、“%”(取模),一元的“-”(负号),所有这些操作符都可用于实数。然而需要特别说明的是取模操作符(%),Lua中对该操作符的定义为:

代码如下:

a % b == a - floor(a / b) * b

由此可以推演出x % 1的结果为x的小数部分,而x - x % 1的结果则为x的整数部分。类似的,x - x % 0.01则是x精确到小数点后两位的结果。

2. 关系操作符:

Lua支持的关系操作符有:>、<、>=、<=、==、~=,所有这些操作符的结果均为true或false。

操作符==用于相等性测试,操作符~=用于不等性测试。这两个操作符可以应用于任意两个值。如果两个值的类型不同,Lua就认为他们不等。nil值与其自身相等。对于table、userdata和函数,Lua是通过引用进行比较的。也就是说,只有当他们引用同一个对象时,才视为相等。如:

代码如下:

a = {}

a.x = 1

a.y = 0

b = {}

b.x = 1

b.y = 1

c = a

其结果是a == c,但a ~= b。

对于字符串的比较,Lua是按照字符次序比较的。

3. 逻辑操作符:

Lua支持的逻辑操作符有:and、or和not。与条件控制语句一样,所有的逻辑操作符都将false和nil视为假,其他的结果均为真。和其他大多数语言一样,Lua中的and和or都使用“短路原则”。在Lua中有一种惯用写法“x = x or v”,它等价于:if not x then x = v end。这里还有一种基于“短路原则”的惯用写法,如:

代码如下:

max = (x >y) and x or y

这等价于C语言中max = (x >y) ? x : y。由于x和y均为数值,因此它们的结果将始终为true。

4. 字符串连接:

前一篇Blog已经提到了字符串连接操作符(..),这里再给出一些简单的示例。

代码如下:

/>lua

>print(“Hello ” .. “World)

Hello World

>print(0 .. 1)--即使连接操作符的操作数为数值类型,在执行时Lua仍会将其自动转换为字符串。

01

5. table构造器:

构造器用于构建和初始化table的表达式。这是Lua特有的表达式,也是Lua中最有用、最通用的机制之一。其中最简单的构造器是空构造器{},用于创建空table。我们通过构造器还可以初始化数组,如:

代码如下:

days = {”Sunday“,”Monday“,”Tuesday“,”Wednesday“,”Thursday“,”Friday“,”Saturday“}

for i = 1,#days do

print(days[i])

end

--输出结果为

--Sunday

--Monday

--Tuesday

--Wednesday

--Thursday

--Friday

--Saturday

从输出结果可以看出,days在构造后会将自动初始化,其中days[1]被初始化为”Sunday“,days[2]为”Monday“,以此类推。

Lua中还提供了另外一种特殊的语法用于初始化记录风格的table。如:a = { x = 10, y = 20 },其等价于:a = {}; a.x = 10; a.y = 20

在实际编程时我们也可以将这两种初始化方式组合在一起使用,如:

代码如下:

polyline = {color = ”blue“, thickness = 2, npoints = 4,

{x = 0, y = 0},

{x = 10, y = 0},

{x = -10, y = 1},

{x = 0, y = 1} }

print(polyline[”color“]);

print(polyline[2].x)

print(polyline[4].y)

--输出结果如下:

--blue

--10

--1

除了以上两种构造初始化方式之外,Lua还提供另外一种更为通用的方式,如:

代码如下:

pnames = { [”+“] = ”add“, [”-“] = ”sub“, [”*“] = ”mul“, [”/“] = ”div“}

print(opnames[”+“])

i = 20; s = ”-“

a = { [i + 0] = s, [i + 1] = s .. s, [i + 2] = s..s..s }

print(a[22])

对于table的构造器,还有两个需要了解的语法规则,如:

代码如下:

a = { [1] = ”red“, [2] = ”green“, [3] = ”blue“, }

这里需要注意最后一个元素的后面仍然可以保留逗号(,),这一点类似于C语言中的枚举。

代码如下:

a = {x = 10, y = 45; ”one“, ”two“, ”three“ }

可以看到上面的声明中同时存在逗号(,)和分号(;)两种元素分隔符,这种写法在Lua中是允许的,

我们通常会将分号(;)用于分隔不同初始化类型的元素,如上例中分号之前的初始化方式为记录初始化方式,而后面则是数组初始化方式。

二、语句:

1. 赋值语句:

Lua中的赋值语句和其它编程语言基本相同,唯一的差别是Lua支持“多重赋值”,如:a, b = 10, 2 * x,其等价于a = 10; b = 2 * x。然而需要说明的是,Lua在赋值之前需要先计算等号右边的表达式,在每一个表达式都得到结果之后再进行赋值。因此,我们可以这样写变量交互:x,y = y,x。如果等号右侧的表达式数量少于左侧变量的数量,Lua会将左侧多出的变量的值置为nil,如果相反,Lua将忽略右侧多出的表达式。

2. 局部变量与块:

Lua中的局部变量定义语法为:local i = 1,其中local关键字表示该变量为局部变量。和全局变量不同的是,局部变量的作用范围仅限于其所在的程序块。Lua中的程序可以为控制结构的执行体、函数执行体或者是一个程序块,如:

下面的x变量仅在while循环内有效。

代码如下:

while i <= x do

local x = i * 2

print(x)

i = i + 1

end

如果是在交互模式下,当执行local x = 0之后,该变量x所在的程序即以结束,后面的Lua语句将被视为新的程序块。如果想避免此类问题,我们可以显式的声明程序块,这样即便是在交互模式下,局部变量仍然能保持其块内有效性,如:

代码如下:

do

local a2 = 2 * a

local d = (b ^ 2 - 4 * a) ^ (1 / 2)

x1 = (-b + d) / a2

x2 = (-b - d) / a2

end--a2和d的作用域至此结束。

和其它编程语言一样,如果有可能尽量使用局部变量,以免造成全局环境的变量名污染。同时由于局部变量的有效期更短,这样垃圾收集器可以及时对其进行清理,从而得到更多的可用内存。

3. 控制结构:

Lua中提供的控制语句和其它大多数开发语言所提供的基本相同,因此这里仅仅是进行简单的列举。然后再给出差异部分的详细介绍。如:

1). if then else

代码如下:

if a < 0 then

b = 0

else

b = 1

end

2). if elseif else then

代码如下:

if a < 0 then

b = 0

elseif a == 0 then

b = 1

else

b = 2

end

3). while

代码如下:

local i= 1

while a[i] do

print(a[i])

i = i + 1

end

4). repeat

代码如下:

repeat

line = io.read()

until line ~= ”“ --直到until的条件为真时结束。

print(line)

5). for

代码如下:

for var = begin, end, step do --如果没有step变量,begin的缺省步长为1。

i = i + 1

end

需要说明的是,for循环开始处的三个变量begin、end和step,如果它们使表达式的返回值,那么该表达式将仅执行一次。再有就是不要在for的循环体内修改变量var的值,否则会导致不可预知的结果。

6). foreach

代码如下:

for i, v in ipairs(a) do--ipairs是Lua自带的系统函数,返回遍历数组的迭代器。

print(v)

end

for k in pairs(t) do--打印table t中的所有key。

print(k)

end

见如下示例代码:

代码如下:

days = {”Sunday“, ”Monday“, ”Tuesday“, ”Wednesday“, ”Thursday“, ”Friday“, ”Saturday“ }

revDays = {}

for k, v in ipairs(days) do

revDays[v] = k

end

for k in pairs(revDays) do

print(k .. ” = “ .. revDays[k])

end

--输出结果为:

--Saturday = 7

--Tuesday = 3

--Wednesday = 4

--Friday = 6

--Sunday = 1

--Thursday = 5

--Monday = 2

7). break

和C语言中的break语义完全相同,即跳出最内层循环。

篇2:Lua教程(三):表达式和语句

这篇文章主要介绍了Lua中的repeat...until循环语句使用教程,是Lua入门学习中的基础教程,需要的朋友可以参考下与for和while循环不同,在循环的`顶部测试循环条件,Lua编程语言的repeat...until 循环检查循环底部的状态。

repeat...until 循环类似于while循环,不同的是do ... while循环是保证至少执行一次。

语法

Lua编程语言repeat...until循环的语法是:

代码如下:

repeat

statement(s)

until( condition )

注意的是,条件表达式出现在循环结束,所以在循环语句(S)执行一次之前的条件进行测试。

如果条件为false,控制流程跳转备份执行循环语句(S)再次执行。这个过程反复进行,直到给定的条件变为真。

流程图:

例如:

代码如下:

--[ local variable definition --]

a = 10

--[ repeat loop execution --]

repeat

print(“value of a:”, a)

a = a + 1

until( a >15 )

当建立并执行上述程序,它会产生以下结果:

代码如下:

value of a: 10

value of a: 11

value of a: 12

value of a: 13

value of a: 14

篇3:Lua教程(三):表达式和语句

腿法,即人体下肢屈伸、摆扣、剪绞等各种攻击方法。腿可以上踢头胸,中踢腰腹,下踢裆腿,前后左右均有各种不同的攻击腿法。由于女子防身的特点要求要速战速决,因此在运用腿法时,须快速、准确地给敌人以重击。下面介绍一些女子防身常用腿法。

(一)弹踢

动作方法:支撑腿稍屈,另一腿由屈到伸向前弹击,膝部挺直,脚面绷平,力达足背或足尖(图1、2)。

要点:弹击要脆快有力,且迅速回收。

用法:对方从正面向我袭击,我先朝其面部虚击左右拳,待其招架时以最快速度弹踢对方,眼视对方肩部。

攻击部位:主要攻击对方裆部,裆部受击,疼痛难忍,甚至昏厥。

(二)蹬踢

动作方法:支撑腿稍屈,另一腿由屈到伸,勾足尖向前蹬击,膝部挺直,力达前脚掌或足跟(图3、4)。

要点:须快速有力地完成腿法,支撑脚站立要稳。

用法:对方双手向我进攻,且身体重心有前移惯性,我除上肢防开其双拳进攻外,可起腿蹬击对方,眼视对方肩部。

攻击部位:主要攻击对方小腹及裆部,蹬腿力量很大,击中小腹后,很容易使对方因疼痛丧失战斗力。

(三)后撩腿

动作方法:支撑腿微屈,上体前俯,另一腿勾足尖脚跟用力向后上方摆动,小腿撩踢(图5、6)。

要点:俯身转髋以腰带劲,后撩大腿带动小腿,力点要准。

用法:当歹徒从后面企图抓抱我时,我迅速用前腿足跟向后上撩击,撩击时左右拳协调配合。

攻击部位:主要攻击对方裆部,有时因对方髋部后闪,也可继撩小腹。

(四)后蹬腿

动作方法:身体前俯,一腿支撑,另一腿屈膝前提,然后用力向后蹬击,足尖朝下,力达足跟(图7、8)。

要点:转身要快,力点要准,重心要稳。

用法:对方从后面向我侵袭,待对方接近我时,我立即上身前俯,起腿后蹬。攻击部位:主要攻击对方小腹和裆部。

(五)侧踹腿

动作方法:重心移至后腿,上体稍后倾,前腿屈膝抬起,脚掌正对攻击目标,展髋、挺膝,踹向对方,力达全脚掌(图9、10)。

要点:上体、大腿、小腿成一线,踹出时一定要大腿推动小腿直线向前发力。

用法:主要用于防卫侧面来敌。用此动作须出腿、收腿要快,否则被对方抓抱腿,后果不堪设想。

攻击部位:以攻击对方裆部为主,也可攻击对方头部、胸部及腿部。

(六)侧弹腿

动作方法:上体左转,带动右腿屈膝前摆,扣膝、绷脚背,随即挺膝向前弹踢小腿,力达脚背(图11、12)。

要点:脚背紧张,膝盖内扣,以膝带腿,快速有力。

用法:当对方从正面、侧面靠近我时,我迅速出腿踢击,动作要快速、果断。

攻击部位:裆部、小腹、小腿迎面骨、头部。

(七)前摆踢腿

动作方法:重心移至一腿,另一腿大小腿折叠,小腿由后向前快速摆动,力达足尖(图13、14)。

要点:身体重心要稳,出腿要快而狠。

用法:当对方从正面抓抱我时,我即刻用脚尖用力踢之。

攻击部位:小腿迎面骨。

(八)上蹬腿

动作方法:当倒地时,一腿屈膝抬起,脚心向上,快速屈伸小腿,蹬击对方(图15、16)。

要点:头部紧贴地面,借力上蹬,蹬腿要 快速有力,力达全脚掌。

用法:当对方将我摔倒并向我压来时,首先要翻转身体屈腿,再用此腿法。

攻击部位:裆部、小腹。

二、膝法

膝法,是屈胯抬膝进行进攻的方法,对女子防身具有重要的作用。膝部因其解剖生理的特点,起动快,力量大,是近距离的重型“武器”。膝法攻击的部位有面部、下颌、胃、肝、背、心、裆部等,女子防身常用前顶膝和横撞膝。

(一)前顶膝

动作方法:一腿微屈支撑,另一腿大小腿折叠,迅速提膝上抬,力达膝盖处。

要点:双手回拉下压与屈膝上顶要协调一致,动作要快,攻击部位要准。

用法:当对方从正面搂抱我时,我即用双手搂住对方的脖子回拉下压,同时屈膝上顶(图17)。

攻击部位和作用:主要攻击对方腹部、裆部,也可顶击对方面部。

(二)横撞膝

动作方法:一腿微屈,支撑脚向外转,上体稍转并侧斜倾,另一腿屈膝上抬横撞对方,力达膝盖处(图18、图19)。

要点:屈髋蓄劲,支撑腿要稳固。

用法:对方近身抓我头部、肩部,我顺势低头偏身抬膝横撞,力达膝盖处 。

上一篇:小学田径运动会简报下一篇:与书为伴 演讲稿