05 Lua 控制结构

简介: Lua 体积小、启动速度快,一个完整的 Lua 解释器不过200k,在所有脚本引擎中,Lua 的速度可以说是最快的。所以 Lua 是作为嵌入式脚本的最佳选择。
我是陈皮,一个在互联网 Coding 的 ITer,个人微信公众号「陈皮的JavaLib」关注第一时间阅读最新技术文章。

1 判断语句

判断语句块由 if,elseif,else 关键字组成,并且 以 end 关键字结尾。条件表达式的结果可以是任何值。Lua 中将 false 和 nil 当作假,其他值都作为真(0和空字符串也当作真)。

-- 定义1
if 表达式 then
    语句块
end

-- 定义2
if 表达式 then
    语句块
else
  语句块
end

-- 定义3
if 表达式 then
    语句块
elseif 表达式 then
  语句块
elseif 表达式 then
  语句块
...
else
  语句块
end

定义1演示例子如下:

a = 10

if a < 20 then print("ok") end

if nil then print("I am nil") end

if 0 then print("I am 0") end

function func(b)
    if a == b then
        print("equals")
    end
end

func(10)

-- 输出结果如下
ok
I am 0
equals

定义2演示例子如下:

name = "chenpi"

function func(myname)
    if name == myname then
        print("equals")
    else
        print("not equals")
    end
end

func("chenpiok")

-- 输出结果如下
not equals

定义3演示例子如下:

function func(age)
    if age ==10 then
        print("1")
    elseif age == 20 then
        print("2")
    else
      print("3")
    end
end

func(20) -- 2

2 循环语句

2.1 while...do

while 循环条件 do
    循环体
end

-- 例子,输出1-5五个数字
local i = 1
while i <= 5 do
  print(i)
    i = i + 1
end

2.2 for...do

for 变量 = 初始值, 终止值, 步长 do
    循环体
end

-- 例子,输出1-5五个数字
for i = 1, 5, 1 do
    print(i)
end

for i = 1, 5 do  -- 步长可以省略,默认为1
    print(i)
end

-- 输出5-1
for i = 5, 1, -1 do
    print(i)
end

需要注意,初始值,终止值,步长都只会被执行一次,所以即使你在循环过程中,改变它们的值也没用。

-- 以下例子还是只输出1-5五个数字
local x = 5
local y = 1
for i = 1, x, y do
    print(i)
    x = 10
    y = 3
end

2.3 repeat...until

repeat
    循环体
until 循环条件

-- 例子,输出1-5五个数字
local i = 1
repeat
    print(i)
    i = i + 1
until i > 5

2.4 for...in...do

for 变量列表 in 迭代器 do
    循环体
end

t = {"a", "b", "c"}
for k,v in pairs(t) do
    print(k..":"..v)
end

-- 输出结果如下
1:a
2:b
3:c

我们可以自定义一个迭代器。

-- 定义迭代器
function mypairs(t)
    return myfunc, t, 0 -- 返回迭代函数,待遍历的集合,控制变量。待遍历的集合,控制变量会传入迭代函数中
end

function myfunc(t, i)
    i = i + 1
    local v = t[i]
    if v then
        return i, v
    end
    return nil, nil
end

t = {"a", "b", "c"}
for k,v in mypairs(t) do
    print(k..":"..v)
end

-- 输出结果如下
1:a
2:b
3:c

2.5 break

break 可以跳出循环。

for i = 1, 5, 1 do
    print(i)
    if i == 3 then
        break
    end
end

本次分享到此结束啦~~

如果觉得文章对你有帮助,点赞、收藏、关注、评论,您的支持就是我创作最大的动力!

相关文章
|
6月前
|
存储 NoSQL Redis
Redis的Lua脚本有什么作用?
Redis Lua脚本用于减少网络开销、实现原子操作及扩展指令集。它能合并操作降低网络延迟,保证原子性,替代不支持回滚的事务。通过脚本,代码复用率提高,且可自定义指令,如实现分布式锁,增强Redis功能和灵活性。
253 1
|
5月前
|
消息中间件 NoSQL Java
Redis系列学习文章分享---第六篇(Redis实战篇--Redis分布式锁+实现思路+误删问题+原子性+lua脚本+Redisson功能介绍+可重入锁+WatchDog机制+multiLock)
Redis系列学习文章分享---第六篇(Redis实战篇--Redis分布式锁+实现思路+误删问题+原子性+lua脚本+Redisson功能介绍+可重入锁+WatchDog机制+multiLock)
228 0
|
1月前
|
缓存 分布式计算 NoSQL
大数据-43 Redis 功能扩展 Lua 脚本 对Redis扩展 eval redis.call redis.pcall
大数据-43 Redis 功能扩展 Lua 脚本 对Redis扩展 eval redis.call redis.pcall
31 2
|
2月前
|
存储 JSON Ubuntu
如何使用 Lua 脚本进行更复杂的网络请求,比如 POST 请求?
如何使用 Lua 脚本进行更复杂的网络请求,比如 POST 请求?
|
3月前
|
存储 NoSQL Redis
Tair的发展问题之在Redis集群模式下,Lua脚本操作key面临什么问题,如何解决
Tair的发展问题之在Redis集群模式下,Lua脚本操作key面临什么问题,如何解决
|
6月前
|
缓存 NoSQL Java
【Redis】5、Redis 的分布式锁、Lua 脚本保证 Redis 命令的原子性
【Redis】5、Redis 的分布式锁、Lua 脚本保证 Redis 命令的原子性
228 0
|
5月前
|
JSON 监控 数据格式
使用Lua代码扩展上网行为管理软件的脚本功能
本文介绍了如何使用Lua脚本增强上网行为管理,包括过滤URL、记录用户访问日志、控制带宽和自动提交监控数据到网站。Lua是一种轻量级语言,适合编写扩展脚本。文中提供多个示例代码,如URL过滤器、用户活动日志记录器和带宽控制器,帮助用户根据需求定制网络管理功能。通过这些示例,用户可以快速掌握Lua在上网行为管理中的应用。
174 4
|
5月前
|
NoSQL API Redis
使用Redis Lua脚本实现高级限流策略
使用Redis Lua脚本实现高级限流策略
203 0
|
5月前
|
消息中间件 NoSQL Java
Spring Boot中使用Redis和Lua脚本实现延时队列
Spring Boot中使用Redis和Lua脚本实现延时队列