Lua学习笔记(3)——语句

赋值

1.Lua支持多重赋值:a,b = 10,2*x  等价于 a = 10, b=2*x。

2.多重赋值中,先对等号右边的所有元素求值,然后才执行赋值。因此,交换两个变量只需要这么表示:

交换两个变量

3.多重赋值时,当左边个数多于右边时,多余的变量将赋为nil,当右边的个数多于左边,那么多余的值会被丢弃。

多重赋值个数不等时

局部变量与块(block)

1.用local语句来创建局部变量,局部变量的作用域仅限于声明它们的那个块:

局部变量

2.显式地界定一个块可用do-end关键字,用于严格控制某些局部变量:

do-end 块

3.“尽可能地使用局部变量”是一种良好的编程风格。局部变量可以避免将一些无用的名称引入全局环境,避免弄坏了全局环境。并且访问局部变量比访问全局变量快。最后,局部变量会随着其作用域的结束而消失,进而被GC回收。

4.Lua讲局部变量的声明当做语句处理。局部变量只有在声明之后才是可见(visible)的。

局部变量

5.创建一个局部变量foo并用全局变量foo的值初始化它,可以保存全局变量foo的值,避免被后续函数改变,并且能加速当前作用域对foo的访问。

习惯写法

6.在一个块的中间使用声明语句可以让这个变量在初始化时刻就拥有一个有意义的初值,并且缩短它的作用域,这样有助于提高代码的可读性。

控制结构

1.控制结构包括:if(条件),while、repeat、for(迭代)。其中if、for 和 while 用end结尾,repeat用until结尾,并且所有不是false和nil的值都视为真。

if then else

1.根据if后条件的真假来判断执行then或者else语句。

if 语法
嵌套的if

while

1.重复执行循环体直到while的条件为假。

while语法

repeat

1.重复执行循环体直到repeat的条件为真。

repeat语法

数字型for(numeric for)

数字型for语法

1.var从exp1变化到exp2,每次变化都已exp3为步长(step)递增var,并执行一次执行体。弱exp3不指定,默认为1。

示例

2.for的三个表达式是在循环开始前一次性求值的,并且控制变量会被自动声明为for语句的局部变量,仅在循环体内可见,在循环结束后就不存在了。如果要在循环结束后访问控制变量的值,应将值保存到另一个变量中。

控制变量是局部的
循环结束后要访问控制变量的值 i

泛型for


泛型for语法(打印数组a的所有值)
示例

1.ipairs,用于遍历数组的迭代器函数,每次循环中,i会被赋予一个索引值,同时v被赋予一个对应索引的数组元素值。

2.通过不同的迭代器,泛型for几乎可以遍历所有的东西,而且代码极具可读性。标准库中的迭代器包括:文件中每行的(io.lines),迭代table元素的(pairs),迭代数组元素的(ipairs),迭代字符串中单词的(string.gmatch)等。迭代器也能自己编写。

3.泛型for与数字for的相同点,一是循环变量是循环体的局部变量;二是执行体中绝不应该对循环变量作任何赋值。

4.具体示例,要将一周中每天名称的表days转换成它再一周中的位置:

一周中每天的名称
创建一个逆向table,以名称作为索引,位置作为值
revDays的最后结果

break与return

1.break 和 return 用于跳出当前的块。并且只能是一个块的最后一条语句,或者end,else或until前的一条语句,因为位于它们之后的语句无法被执行到。

break是then块的最后一条语句


2.break,用于结束一个循环,它只会跳出包含它的一个内部循环(for,repeat或while),而不改变外层的循环。

3.return,用于从一个函数中返回结果,或者用于简单地结束一个函数的执行。

4.如果希望在一个块中间插入一句return或break,可以使用一个显式的do块来保住一条return语句:

块中插入return或break
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,332评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,508评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,812评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,607评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,728评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,919评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,071评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,802评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,256评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,576评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,712评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,389评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,032评论 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,798评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,026评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,473评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,606评论 2 350

推荐阅读更多精彩内容

  • 《裕语言》速成开发手册3.0 官方用户交流:iApp开发交流(1) 239547050iApp开发交流(2) 10...
    叶染柒丶阅读 26,299评论 5 19
  • 作为80后,我们都是新时代的年轻人,我们崇尚孝道,但绝对不守旧,行事具有80后特有的风格,崇尚自由,不喜拘束。这样...
    TA你我集结阅读 377评论 0 1
  • 跑完步神清气爽,来写一下晨读感悟。 跑步的好处真有很多,不用费力找,脑子里就能蹦出词儿。 大部分人跑步,是喜欢看见...
    poootaootooo阅读 205评论 0 0
  • 上高中的时候,没觉得友情有那么复杂,听别人动不动就绝交,要不然就吵架你说我坏话我说你坏话的闹别扭还觉得是人家矫情,...
    庭亭阅读 335评论 2 1
  • 朋友想在秋天去北京,去看故宫和长城,我劝她,最好别去,毕竟中国这么大,还有别的风景/为什么要去故宫,为什么要去长城...
    狗奴才乐队阅读 165评论 0 0