Lua基础——赋值语句、表达式、流程控制

赋值语句

注释,用(--)来表示

定义,lua中没有定义(申明数据类型),它是通过赋值来确定其数据类型的。

赋值,是改变一个变量的值和改变表域的最基本的方法。 a = "hello" .. "world"

Lua可以对多个变量同时赋值,变量列表和值列表的各个元素用逗号分开,赋值语句右边的值会依次赋给左边的变量。a, b = 10, 2*x <--> a=10; b=2*x

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

x, y = y, x  -- swap ‘x‘ for ‘y‘
a[i], a[j] = a[j], a[i]  -- swap ‘a[i]‘ for ‘a[i]‘

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

a. 变量个数>值的个数按变量个数补足nil ;b. 变量个数<值的个数多余的值会被忽略

多值赋值经常用来交换变量,或将函数调用返回给变量: a, b = f() --f()返回两个值,第一个赋给a,第二个赋给b。

表达式

表达式---是表达式就需要运算符。

1.算术运算符:+-*/^(加减乘除幂,二元运算符),-(负值,一元运算符);操作跟C++一样

2.关系运算符:<、>、<=、>=、==、~=(不等于);这些操作符返回结果为false或者true;==和~=比较两个值,如果两个值类型不同,Lua认为两者不同;nil只和自己相等。Lua通过引用比较tables、userdata、functions。也就是说当且仅当两者表示同一个对象时相等。

print((2 < 15))   --true
print(("1" == 1)) --false
print(("2" > "15")) --true
a={};a.x=1;a.y=0;
b={};b.x=1;b.y=0;
print((a ~= b)); --true
c = a;
print((a == c)); --true
--Lua比较数字按传统的数字大小进行,比较字符串按字母的顺序进行,但是字母顺序依赖于本地环境。
--为了避免不一致的结果,混合比较数字和字符串,Lua会报错,比如:2 < "15"

3.逻辑运算符:and、or、not;逻辑运算符认为false和nil是假(false),其他为真,0也是true.

and和or的运算结果不是true和false,而是和它的两个操作数相关。a and b -- 如果a为false,则返回a,否则返回b ;a or b -- 如果a为true,则返回a,否则返回b ;想想堆栈,若第一个变量就可以判断出真假,就不需要判断第二个变量了。

and的优先级比or高。

C语言中的三元运算符,a ? b : c  ==>>在Lua中可以这样实现: (a and b) or c

not的结果一直返回false或者true

print(not nil) --> true
print(not false) --> true
print(not 0) --> false
print(not not nil) --> false 

4.连接运算符:.. (两个点);如果操作数为数字,Lua将数字转成字符串。

print("Hello " .. "World") --> Hello World
print(0 .. 1) --> 01 

流程控制

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

do..end(相当于c/c++的{})

1.if语句,有三种形式

if conditions then
    then-part
end;
if conditions then
   then-part
else
   else-part
end;
if conditions then
   then-part
elseif conditions then
    elseif-part
   .. --->多个elseif
else
   else-part
end;

由于Lua不支持switch语句,所以这种一连串的if-else if代码很常见的。

2.while语句

while condition do
   statements;
end;

3.repeat-until语句

repeat
  statements;
until conditions;

条件判断是在循环体之后做的,因此循环体至少会执行一次。类似于C++中的,do..while()

4.for语句

数字型for(number for)

for var=exp1,exp2,exp3 do
    loop-part
end
--for将用exp3作为step从exp1(初始值)到exp2(终止值),执行loop-part。其中exp3可以省略,默认step=1

泛型for(generic for),泛型for循环通过一个迭代器(iterator)函数类遍历所有值。

--打印数组a的所有值
for i,v in ipairs(a) do print(v) end

Lua的基础库提供了ipairs,这是一个用于遍历数组的迭代器函数。在每次循环中,i会被赋予一个索引值,同时v被赋予一个对应该索引的数组元素值。

再看一个遍历表key的例子:
-- print all keys of table ‘t‘
--for k in pairs(t) do print(k) end 

days = {"Sunday", "Monday", "Tuesday", "Wednesday","Thursday", "Friday", "Saturday"}
revDays = {}
for i,v in pairs(days) do
revDays[v] = i  --revDays = {["Sunday"] = 1, ["Monday"] = 2,["Tuesday"] = 3, ["Wednesday"] = 4,["Thursday"] = 5, ["Friday"] = 6,["Saturday"] = 7}
end
--x = "Tuesday"
--print(revDays[x])--3

for k in pairs(days) do print(k) end --1234567
for k in pairs(revDays) do print(k) end

标准库提供了几种迭代器,包括用于迭代文件中每行的(io.lines)、迭代table元素的(pairs)、迭代数组元素的(ipairs)、迭代字符串中单词的(string.gmatch)等。

5.break和return语句

函数

function foo(a, b, c)
   local sum = a + b
   return sum, c --函数可以返回多个值
end
r1, r2 = foo(1, ‘123‘, ‘hello‘) --平行赋值
print(r1, r2) --124 hello

函数定义:用关键字function定义函数,以关键字end结束

局部变量:用关键字local定义。如果没有用local定义,即使在函数内部定义的变量也是全局变量!

函数可以返回多个值:return a, b, c, ...

平行赋值:a, b = c, d

全局变量:前面的代码定义了三个全局变量:foo、r1和r2

Lua基础——赋值语句、表达式、流程控制,码迷,mamicode.com

时间: 2024-10-05 09:45:28

Lua基础——赋值语句、表达式、流程控制的相关文章

Unit04: JavaScript 概述 、 JavaScript 基础语法 、 流程控制

Unit04: JavaScript 概述 . JavaScript 基础语法 . 流程控制 my.js function f3() { alert("唐胜伟"); } demo1.html  演示点击按钮,弹出提示框 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> <

黑马程序员——Java基础语法(二)---流程控制

------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 本文主要介绍java基础语法中的流程控制,流程控制是我们写出灵活代码的基础.常见的流程控制主要有四类:判断结构.选择结构.循环结构.其他控制结构 一.判断结构 判断结构的标志是if语句,if语句主要有三种表现形式: 1.if(条件表达式) { 执行语句 } 注意: 1.如果if语句中只有一条语句,那么可以不写大括号.不过初学者一定要写括号,以免出错. 2.如果if语句没写大括号,if就只能控制

core java 1~4(HelloWorld &amp; 标识符|关键字|数据类型 &amp; 表达式|流程控制 &amp; 数组)

MODULE 1 Java的编译和运行----------------------------编译:javac -d bin src\HelloWorld.java -d:指定编译后的class 文件的存放路径 若在此 .java文件的类中,调用了另一个文件的类,则需先编译被调用的类,然后输入 javac -d bin -cp bin src\HelloWorld.java 或者编译所有 .java文件 javac -d bin src\*.java 运行:java -cp bin com.br

python 学习之 基础篇三 流程控制

前言: 一. python中有严格的格式缩进,因为其在语法中摒弃了“{}”来包含代码块,使用严格的缩进来体现代码层次所以在编写代码的时候项目组要严格的统一器缩进语法,一个tab按键设置为四个空格来缩进,防止缩进不规范导致的启动失败. 二.在python中变量(标识符)命名和一般的高级语言没有什么不同都推荐使用,字母.下划线.数字命名,其中数字不能作为标识符的开头,python中变量名是区分大小写的(所以可以使用驼峰命名法去命名,也就是英文单词的字母首字母大写其余的小写).以下划线开头的标识符是有

基础知识回顾——流程控制

通过条件语句或循环语句改变程序运行顺序的过程叫流程控制. 条件语句 条件语句:用于改变程序的执行流程,其中else代码块是可选的.1.if/else 1 pwd = raw_input("what's the password ?") 2 if pwd == 'apple': 3 print "loging on..." 4 else: 5 print "password error!" 6 print "all done"

PHP基础知识之流程控制的替代语法

PHP 提供了一些流程控制的替代语法,包括 if,while,for,foreach 和 switch. 替代语法的基本形式是把左花括号({)换成冒号(:),把右花括号(})分别换成 endif;,endwhile;,endfor;,endforeach; 以及 endswitch;. <?php if ($a == 5): ?>A is equal to 5<?php endif; ?> <?phpif ($a == 5):    echo "a equals 5

13、SQL基础整理(流程控制begin……end)

流程控制 begin ……end将一个语句块包含起来,中间可以写任何语句 格式: begin--开始 select *from student end--结束 if declare @bianliang int set @bianliang = 10 if @bianliang>10 print '你好' else print 'hello' 若if后面有多个语句,用begin  end作为分隔点 declare @shuxue decimal(18,2) select @shuxue = MA

Java基础第四天总结——Java基础语法——程序流程控制

目录: 一.程序流程控制 二.顺序结构 三.分支语句1:if-else结构 四.分支语句2:switch-case结构 五.循环结构 六.循环结构1:for循环 /*--------------------------黄金分割线----------------------------------*/ 一.程序流程控制 > 顺序结构 ● 自上逐行向下执行 >分支结构 ● 根据条件,选择性执行某段代码 ● 有if-else和switch-case两种分支语句 >循环结构 ● 根据循环条件,重

JAVA基础之五:流程控制

原文地址:http://happyshome.cn/blog/java/basics/flow.html 本文主要介绍了Java中常用的流程控制结构,循环.嵌套循环.条件判断等. 以及在使用过程中应该注意的问题. 1.  前言 有三种流控制的结构:顺序.条件和循环,如下图所示: 2. 顺序流控制 程序是一个指令序列.顺序流在程序中使用的是最直接.最常用的,程序语句的执行依赖于写入的顺序. 3.  条件流控制 条件流控制的几种类型:if-then,if-then-else,if-elseif-el