【Lua 入门基础篇(二)】变量&循环

简介: 笔记

一、变量


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


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


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

二、赋值语句


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

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

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

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

三、索引


对 table 的索引:[].

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

四、循环语句


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

1.png

1. while

i = 10
while(i >= 1)
do
    print(i)
    i = i - 1
end

2.for

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

  • 数值for循环
  • 泛型for循环

1. 数值for循环

for var = exp1, exp2, exp3 do
  <执行体>
end

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

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

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

2. 泛型for循环

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

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

3.repeat…until

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

x = 3
repeat
  print(x)
  x = x - 1
until(x == 0)


4.循环嵌套

三种循环都可以相互嵌套


五、循环控制语句


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

2.png

1.break

x = 3
repeat
  print(x)
  x = x - 1
  if (x == 1) then break end
until(x == 0)

运行结果:

3
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

实现 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

方法二,使用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

方法三,使用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


相关文章
|
6月前
|
存储 Java C语言
lua变量、数据类型、if判断条件和数据结构table以及【lua 函数】
lua变量、数据类型、if判断条件和数据结构table以及【lua 函数】
48 0
Lua 循环
Lua 支持多种循环机制:while基于条件重复,for分数值和泛型形式,还有repeat-until直到条件满足。循环体可嵌套,用于复杂重复操作。
|
1天前
|
存储 编译器
Lua 变量
Lua变量分全局、局部和表域,全局变量默认,局部由`local`声明,作用域始于声明至语句块结束。变量初值为`nil`。示例展示了全局和局部变量的用法,以及其作用域影响。执行显示:5 nil, 6 6, 5 6。
|
11月前
|
NoSQL 安全 Java
Redis从入门到精通之Lua 脚本
Lua 是一种轻量级的脚本语言,被广泛应用于游戏开发、嵌入式系统、Web 开发、科学计算等领域。Redis 内置了 Lua 解释器,使得用户可以通过编写 Lua 脚本来扩展 Redis 的功能。在 Redis 中,可以使用 EVAL 和 EVALSHA 命令执行 Lua 脚本。
493 1
Redis从入门到精通之Lua 脚本
|
12月前
|
存储 算法 JavaScript
[✔️]lua for循环
[✔️]lua for循环
79 0