Lua表达式和控制结构学习笔记


Posted in Javascript onDecember 15, 2014

算术操作符

Lua 的算术操作符有:

"+"(加法):

print(1 + 2)

"-"(减法):

print(2 - 1)

"*"(乘法):

print(1 * 2)

"/"(除法):

print(1 / 2)

"^"(指数):

print(27^(-1/3))

"%"(取模):

print(5 % 3)

关系操作符

Lua 提供以下关系操作符:

< > <= >= == ~=

以上操作符返回的运算结果都是 true 或 false。字符串跟数字不可以进行比较

逻辑操作符

逻辑操作符有 and、or、not

print(1 and 2)

print(nil and 1)

print(false and 2)

print(1 or 2)

print(false or 5)

逻辑操作符将 false 和 nil 视为假,其它的为真。

局部变量与作用域

Lua 通过 local 语句来创建局部变量,局部变量的作用域仅限于声明它们的那个块。

local a, b = 1, 10

if a < b then

    print(a)

    local a

    print(a)

end

print(a, b)

用局部变量 local 保存全局变量,可以加速在当前作用域中对全局变量的访问。对于加速的效果,对比下面计算 斐波那契数列(Fibonacci)的执行时间便知:

function fibonacci(n)

    if n < 2 then

        return n

    end

    return fibonacci(n - 2) + fibonacci(n - 1)

end

io.write(fibonacci(50), "\n")

使用局部变量 local

local function fibonacci(n)

    if n < 2 then

        return n

    end

    return fibonacci(n - 2) + fibonacci(n - 1)

end

io.write(fibonacci(50), "\n")

控制结构

if then elseif else end

if num == 1 then

    print(1)

elseif num == 2 then

    print(2)

else

    print("other")

end

Lua 不支持 switch 语句

while

先判断 while 条件,如果条件为真,继执行循环体,否则结束

local i = 1

while a[i] do

    print(a[i])

    i = i + 1

end

repeat-until

先执行一次循环体,再判断条件,如果条件为真则退出循环体,否则继续执行循环体。类似其它语言的 do-while 语句,循环体至少会执行一次

local a = 1

repeat

    a = a + 1

    b = a

    print(b)

until b < 10

for 循环

for 循环语句有两种形式:数字型for(numeric for)、泛型for(generic for)

数字型 for 语法:

for start, end, step do

    doing something

end

start 是开始值,end 是结束值,step是步长(可选,默认为1)

for a = 10, 0, -2 do

    print(a)

end

泛型 for 循环通过一个迭代器(iterator)函数来遍历所有值:

tab = { key1 = "val1", key2 = "val2", "val3" }

for k, v in pairs(tab) do

    if k == "key2" then

        break   

    end

    print(k .. " - " .. v)

end

break 和 return 语句用于跳出当前执行的块。
Javascript 相关文章推荐
JavaScript中两种链式调用实现代码
Jan 12 Javascript
创建公共调用 jQuery Ajax 带返回值
Aug 01 Javascript
JS实现可改变列宽的table实例
Jul 02 Javascript
JS和jquery获取各种屏幕的宽度和高度的代码
Aug 02 Javascript
js中window.open()的所有参数详细解析
Jan 09 Javascript
跟我学习javascript的全局变量
Nov 16 Javascript
vue.js指令v-model实现方法
Dec 05 Javascript
Angular的MVC和作用域
Dec 26 Javascript
Angular 2父子组件数据传递之@Input和@Output详解(下)
Jul 05 Javascript
node.js 核心http模块,起一个服务器,返回一个页面的实例
Sep 11 Javascript
详解js跨域请求的两种方式,支持post请求
May 05 Javascript
JavaScript制作3D旋转相册
Aug 02 Javascript
如何在node的express中使用socket.io
Dec 15 #Javascript
node.js中使用socket.io制作命名空间
Dec 15 #Javascript
node.js中的fs.fstatSync方法使用说明
Dec 15 #Javascript
node.js中的fs.fstat方法使用说明
Dec 15 #Javascript
node.js中的fs.readFileSync方法使用说明
Dec 15 #Javascript
node.js中的fs.readFile方法使用说明
Dec 15 #Javascript
node.js中的fs.linkSync方法使用说明
Dec 15 #Javascript
You might like
Erlang的运算符(比较运算符,数值运算符,移位运算符,逻辑运算符)
2012/07/23 PHP
JavaScript面向对象知识串结(读JavaScript高级程序设计(第三版))
2012/07/17 Javascript
禁止页面刷新让F5快捷键及右键都无效
2014/01/22 Javascript
js中函数调用的两种常用方法使用介绍
2014/07/17 Javascript
javascript中eval解析JSON字符串
2016/02/27 Javascript
JavaScript中split与join函数的进阶使用技巧
2016/05/03 Javascript
微信小程序 数据封装,参数传值等经验分享
2017/01/09 Javascript
JS中mouseup事件丢失的原因与解决办法
2017/06/14 Javascript
vue单页开发父子组件传值思路详解
2018/05/18 Javascript
Vue中div contenteditable 的光标定位方法
2018/08/25 Javascript
vue实现pdf导出解决生成canvas模糊等问题(推荐)
2018/10/18 Javascript
微信小程序遍历Echarts图表实现多个饼图
2019/04/25 Javascript
Python中几个比较常见的名词解释
2015/07/04 Python
python 第三方库的安装及pip的使用详解
2017/05/11 Python
Python+Django搭建自己的blog网站
2018/03/13 Python
Python实现的序列化和反序列化二叉树算法示例
2019/03/02 Python
pyqt5 实现 下拉菜单 + 打开文件的示例代码
2019/06/20 Python
django中的数据库迁移的实现
2020/03/16 Python
Python如何实现FTP功能
2020/05/28 Python
美国领先的礼品卡网站:GiftCards.com
2016/11/02 全球购物
爱尔兰电子产品购物网站:Komplett.ie
2018/04/04 全球购物
Foot Locker德国官方网站:美国运动服和鞋类零售商
2018/11/01 全球购物
Vivo俄罗斯官方在线商店:中国智能手机品牌
2019/10/04 全球购物
简述DNS进行域名解析的过程
2013/12/02 面试题
人事主管岗位职责范本
2013/12/04 职场文书
幼儿园义卖活动方案
2014/01/17 职场文书
冰淇淋店的创业计划书
2014/02/07 职场文书
户外婚礼策划方案
2014/02/08 职场文书
勤俭节约倡议书
2014/04/14 职场文书
计算机求职信
2014/07/02 职场文书
八项规定自查自纠报告及整改措施
2014/10/26 职场文书
工作失职检讨书
2015/01/26 职场文书
长城英文导游词
2015/01/30 职场文书
校长师德表现自我评价
2015/03/04 职场文书
观看《信仰》心得体会
2016/01/15 职场文书
MySQL系列之十一 日志记录
2021/07/02 MySQL