Lua—表达式以及各类语句

1.if then else end 

if 语句先测试其条件,并根据条件是否知足执行条件相应的then部分或else部分。else部分是可选的。 编程

if a < 0 then a = 0 end
if a < b then return a else return b end 
if a < b then rerurn a elsif a == b then return 0 else return b end 
复制代码

若是要编写嵌套的if语句可使用else-if,能够避免重复使用end lua语言不支持switch语句,因此这种一连串的else-if语句比较常见markdown

2.while 

当条件为真时while循环会重复执行其循环体。lua语言先测试while语句的条件,条件为假时则循环结束。否做,lua会执行循环体并不断重复这个过程。 编程语言

local i = 1
while a[i] > 0 do 
    print(a[i])
    i = i +1;
end 
复制代码

3.repeat-until repeat-until 

语句会重复执行其循环体直到条件真时结束。因为条件测试在循环体以后执行,因此循环体至少会执行一次。 函数

--输出第一个非空的行 测试

local line
repeat
    line = io.read()
    until line ~=“”
print(line) 
复制代码

和其余大多数其余编程语言不一样,在lua语言中,循环体内声明的局部变量的做用域包括测试条件 lua

#include <stdio.h>
int main(void)
{
    int count = 0; //在外部块中声明
    do
    {	
        int count = 0;
        ++count;
        printf(“count = %d\n”,count);
    }while(++count <= 5);
    printf(“count = %d\n”, count)
    system(“pause”)
    return 0;
} 
复制代码

输出内容为:spa

count = 1 
count = 1 
count = 1 
count = 1 
count = 1 
count = 1 
count = 6 
复制代码

循环测试条件中使用的count是外部块中声明的,若是使用lua则使用循环体内声明的count code

4.数值型for 

for语句有两种形式:数值型for和泛型for orm

数值型for: for var = exp1, exp2, exp3 do something endip

在这种循环中, var 值从 exp1变化到 exp2 前的每次循环会执行 something ,并在每次循环结束后将步长 exp3 加到 var上,第三个表达式 exp3 是可选的,若不存在,lua 语言会默认步长值为1,若是不想给循环设置上限,可使用常 math.huge: 按顺序遍历。

pairs和ipairs的区别:

  • pairs迭代器遍历表中的键值对,顺序随机且每次运行时产生不一样的顺序。遍历过程当中每一个元素只会出现一次。
  • ipairs迭代器遍历列表,按顺序遍历,每一个元素也只会出现一次 

键值对:table1 = {[“name”] = “tom”, [“age”] = 18, [“sex”] = “female”} 

列表:table2 = {1, 2, 3};  

5.break、return和goto 

break和return语句用于从当前的循环结构中跳出,goto语句则容许跳转到函数中的几乎任何地方。 

break 

咱们可使用break语句结束循环,该语句会中断包含它的内层循环(例如for、repeat或者while);该语句不能在循环外使用。break中断后,程序会紧接着被中断的循环继续执行。 

return 

return语句用于返回函数的执行结果或简单地结束函数的运行。全部函数的最后都有一个隐含的return,所以咱们不须要在每个没有返回值的函数最后书写return语句。 

local i = 1;
while a[i] do
    if a[i] == v then return i end
        i = i +1
    end
print(i) 
复制代码

思考:a={1,2,3},v=1,那么i打印出来是什么?v=4呢? 

答案:当v=1时,没法打印出i;当v=4时,打印出的i为4。

goto 

goto语句用于当前程序跳转到相应的标签处继续执行。goto的语法很是传统,即保留字goto后面紧跟着标签名。 标签名语法:标签名称先后各紧跟两个冒号,形如::name::。这个复杂的语法是有意而为的,目的是为了在程序中形目地突出这些标签。 

在使用goto语句时,lua语言设置了一些限制条件:

  • 首先,标签遵循常见的可见性规则。思考:能够直接跳转到一个代码块中的标签吗或者goto能够跳转到函数内吗?为何(不能够,由于代码块中的标签对外不可见。) 
  • 其次,goto不能跳转到函数外。 
  • 最后,goto不能跳转到局部变量的做用域。

lua语言规范中一个颇有用的细节是,局部变量的做用域终止于声明变量的代码块中的最后一个有效语句处,标签被认为是无效语句。 

while some_condition do
    if some_other_conditon then goto continue end 
    local var = something
    some code
    ::continue::
end 
复制代码

思考:这个goto语句跳转到了变量var的做用域内吗? 

答案:没有,由于这个continue标签出如今该代码块的最后一个有效语句后,所以goto并未跳转进入变量var的做用域内。

相关文章
相关标签/搜索