当前位置:   article > 正文

【Lua 入门基础篇(二)】变量&循环_lua脚本for循环 定义变量

lua脚本for循环 定义变量

在这里插入图片描述
在这里插入图片描述

一、变量

  • 变量在使用前,需要在代码中进行声明,即创建该变量。

  • 编译程序执行代码之前编译器需要知道如何给语句变量开辟存储区,用于存储变量的值。

  • Lua 变量有三种类型:全局变量局部变量表中的域

  • Lua 中的变量全是全局变量,哪怕是语句块或是函数里,除非用 local 显式声明为局部变量

  • 局部变量的作用域为从声明位置开始到所在语句块结束。

  • 变量的默认值均为 nil。

#!/usr/local/bin/lua

a = 1           -- 全局变量
local b = 2     -- 局部变量

function fun()
    c = 3       -- 全局变量
    local d = 4 -- 局部变量
end

fun()
print(c, d)     -- 3 nil

do
    local a = 5 -- 局部变量
    b = 6       -- 对局部变量重新赋值
    print(a, b) -- 5 6
end

print(a, b)     -- 1 6
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20

二、赋值语句

赋值是改变一个变量的值和改变表域的最基本的方法。

Lua 可以对多个变量同时赋值。

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

  • 变量个数 > 值的个数 按变量个数补足nil
  • 变量个数 < 值的个数 多余的值会被忽略
#!/usr/local/bin/lua

a = 1
b = "ABC"

print(a, b)			-- 1	ABC

a = a + 1
b = "A" .. "BCD"
print(a, b)			-- 2	ABCD

c, d = 1, "2" .. "3"
print(c, d)			-- 1	23

a, b = 1, 2, 3
print(a, b)			-- 1	2
a, b, c = "A", "B"
print(a, b, c)		-- A	B	nil
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

应该尽可能的使用局部变量,有两个好处:

  • 避免命名冲突。
  • 访问局部变量的速度比全局变量更快。

三、索引

对 table 的索引:[].

t[i]
t.i                 -- 当索引为字符串类型时的一种简化写法
gettable_event(t,i) -- 采用索引访问本质上是一个类似这样的函数调用
  • 1
  • 2
  • 3

四、循环语句

Lua 语言提供了以下几种循环处理方式:

在这里插入图片描述

1. while

i = 10
while(i >= 1)
do
    print(i)
    i = i - 1
end
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

2.for

Lua 编程语言中 for语句有两大类:

  • 数值for循环

  • 泛型for循环

1. 数值for循环

for var = exp1, exp2, exp3 do
	<执行体>
end
  • 1
  • 2
  • 3

var 从 exp1 变化到 exp2,每次变化步长为 exp3(默认1)。

function fun(x)
	return x - 1
end
x = 3
for i = 1, fun(x) do print(i)
  • 1
  • 2
  • 3
  • 4
  • 5

for的三个表达式在循环开始前一次性求值,以后不再进行求值。

2. 泛型for循环

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

a = {1, 2, 3}
for i, v in ipairs(a) do print(i, v) end
  • 1
  • 2

3.repeat…until

repeat…until 循环的条件语句在当前循环结束后判断。 (do-while)

x = 3
repeat
	print(x)
	x = x - 1
until(x == 0) -- 条件为真才会停止!!!
  • 1
  • 2
  • 3
  • 4
  • 5

4.循环嵌套

三种循环都可以相互嵌套


五、循环控制语句

Lua 支持以下循环控制语句:

在这里插入图片描述

1.break

x = 3
repeat
	print(x)
	x = x - 1
	if (x == 1) then break end
until(x == 0)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

运行结果:

3
2
  • 1
  • 2

2.goto

Label: ::Label::

local a = 1
::label:: print("--- goto label ---")

a = a + 1
if a < 3 then
    goto label   -- a 小于 3 的时候跳转到标签 label
end
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

实现 continue

方法一,在循环的内部再嵌入一层循环:

table = {1, 2, 3, 4, 5}
for i = 1, #table do
    while true do -- 内层循环
        if table[i] % 2 == 0 then
            break
        end
        print(table[i])
        break -- 正常逻辑也需要break,否则会进入死循环
    end
end
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

方法二,使用goto语句:

table = {1, 2, 3, 4, 5}
for i = 1, #table do
	if table[i] % 2 == 0 then
		goto continue
	end
	print(table[i])
	::continue::
end
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

方法三,使用repeat语句:

table = {1, 2, 3, 4, 5}
for i = 1, #table do
	repeat
		if table[i] % 2 == 0 then
			break
		end
		print(table[i])
	until true
end
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/凡人多烦事01/article/detail/335785
推荐阅读
相关标签
  

闽ICP备14008679号