Lua学习--随手记,会逐步完善

数据类型

nil -> 表示无效值,在条件表达式中相当于false
boolean
number -> 表示双精度类型的实浮点数
string
function -> C或者Lua编写的函数
table -> 是一个关联数组,类似于Map,通过“构造表达式”完成,最简单的是 { }
userdata -> 表示任意存储在变量中 的 C数据结构
thread -> 类似于线程

table ( 表 )

-- 初始化表

mytable = {}

-- 指定值

mytable[1]= "Lua"

-- 移除引用

mytable = nil

-- lua 垃圾回收会释放内存

【例】

a = {}
a["key"] = "value"
key = 10
a[key] = 22
a[key] = a[key] + 11
for k, v in pairs(a) do
  print(k .. " : " .. v)
end

运行结果为:
key : value
10 : 33

在 Lua 里表的默认初始索引一般以== 1 ==开始。

table 不会固定长度大小,有新数据添加时 table 长度会自动增长,没初始的 table 都是 nil。

循环

while 循环

a=1
while(a<=20)  do
  if  a%2 ==0  then
    print(a)
  end
  a=a+1
end

For 循环

普通for循环

for i=val1,val2,val3 do
  XXXXX
end

-- i 从val1变化到val2,每次以val3的步长递增,如果不指定val3,则默认步长为1

泛形for循环

泛型 for 循环通过一个迭代器函数来遍历所有值,类似  foreach 语句。

Lua 编程语言中泛型 for 循环语法格式:

tab={key1="ab",key2="kl"}

for k,v in pairs(tab) do
  print(k..":"..v)
end

tab1={"套","是"}
for k,v in pairs(tab1) do
  print(k,v)
end

Repeat - until 循环(与do while)

repeat
  循环体
until( 条件)

循环控制语句

有了 goto,我们可以实现 continue 的功能:

for i=1, 3 do
  if i <= 2 then
    print(i, "yes continue")
    goto continue
  end
  print(i, " no continue")
  ::continue::
  print([[i'm end]])
end

-- 输出结果为:
1 yes continue
i'm end
2 yes continue
i'm end
3 no continue
i'm end

流程控制

if(布尔表达式) then
  --[ 布尔表达式为 true 时执行该语句块 --]
else
  --[ 布尔表达式为 false 时执行该语句块 --]
end

文件IO

打开文件操作语句如下:

file = io.open (filename , mode)

mode 的值有:

r   以只读方式打开文件,该文件必须存在。
w   打开只写文件,若文件存在则文件长度清为0,即该文件内容会消失。若文件不存在则建立该文件。
a   以附加的方式打开只写文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾,即文件原先的内容会被保留。(EOF符保留)
r+   以可读写方式打开文件,该文件必须存在。
w+   打开可读写文件,若文件存在则文件长度清为零,即该文件内容会消失。若文件不存在则建立该文件。
a+   与a类似,但此文件可读可写
b   二进制模式,如果文件是二进制文件,可以加上b
+   号表示对文件既可以读也可以写

【例】

--- 要提前建立好test文件
-- 以只读方式打开文件
file = io.open("test", "r")

-- 设置默认输入文件为 test
io.input(file)

-- 输出文件第一行
print(io.read())

-- 关闭打开的文件
io.close(file)

-- 以附加的方式打开只写文件
file = io.open("test", "a")

-- 设置默认输出文件为 test.lua
io.output(file)

-- 在文件最后一行添加 Lua 注释
io.write("-- test 文件末尾注释")

-- 关闭打开的文件
io.close(file)

 

posted @   木木木林森  阅读(34)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
点击右上角即可分享
微信分享提示