jinzh notes
jinzh notes

Lua简明教程(一)

Lua简明教程(一)
内容纲要

前言

Lua 是一种轻量小巧的脚本语言,用标准C语言编写并以源代码形式开放, 其设计目的是为了嵌入应用程序中,从而为应用程序提供灵活的扩展和定制功能。

Lua 是巴西里约热内卢天主教大学(Pontifical Catholic University of Rio de Janeiro)里的一个研究小组于 1993 年开发的,该小组成员有:Roberto Ierusalimschy、Waldemar Celes 和 Luiz Henrique de Figueiredo。

变量

  1. 变量不需要声明,直接拿来用就可以,这种情况下是全局变量
  2. 变量使用local声明定义,这是局部变量,在块或者文件结束后会被回收

标识符和注释

标识符

以字母或者下划线开头,其他部分可以使用字母、数字、下划线,注意lua区分变量的大小写

建议标识符不要使用下划线加大写字母的组合(Lua关键字就是这样定义的)。

注释

单行注释:

--

多行注释:

--[[
注释1
注释2
]]

数据类型

数据类型 描述
nil 特殊类型nil,当一个变量未定义时,获取会返回nil,想销毁一个变量时,可以选择将其赋值为nil
Boolean false、true两种值,在lua中只有false和nil属于假值,其他均为真
Numbers 数字类型,lua中的所有数字均使用双精度浮点数表示
Strings 字符串类型,只读类型
Table “关联数组”,可作为数组使用也可作为map使用
Function 函数类型,在lua中作为“一等公民”存在,可作为参数传递,并且所有lua中的函数均为匿名函数(具名函数定义也是等效于匿名函数定义后赋值给变量)
Userdata 自定义类型,就是一个空的内存块,可用于与c进行交互
Thread 表示独立的线路,执行协同程序

循环

三种循环语句,分别为:whileforrepeat...until

while

while(条件)
do
   statements
end

示例:

a=10 -- 声明全局变量
while( a < 20 )
do
   print("a 的值为:", a) -- 打印函数
   a = a+1
end

for

这里for分为两种迭代方式,一种是传统的数值for循环,另一种是使用迭代器进行迭代

数值for循环

for x=init,target,post do
    --something
end

这里init为初始值,tartget为最终变化的目标,post为变化的“步长”,也就是增减值,缺省时为1

示例:

-- 从10到1这个状态转换,每次-1
for i=10,1,-1 do
    print(i)
end

迭代器迭代

pairsipairs两个函数常用于迭代,当然我们也可以自己编写迭代函数(这其中涉及到的了有状态迭代和无状态迭代,就是是否使用闭包的关系)

pairs可以用来迭代所有类型的table,而ipairs只能用于数组table

for k, v in pairs(t) do
    print(k, v)
end

示例:

array = {"Google", "Runoob"}

for key,value in ipair(array)
do
   print(key, value)
end
--[[
输出如下:
1  Google
2  Runoob
]]

repeat until

这个和c中的do while类似,上面的循环都是在执行前进行判断,而repear until却是执行第一次循环后再进行判断,也就是说必定会执行一次循环

repeat
-- something
until( 条件 )

示例:

a = 10
repeat
   print(a)
   a = a + 1
until( a > 15 )

循环控制

breakgoto两种控制手段

break用于退出循环,goto用于转移循环流程

break示例:

--[ 定义变量 --]
a = 10

--[ while 循环 --]
while( a < 20 )
do
   print("a 的值为:", a)
   a=a+1
   if( a > 15)
   then
      --[ 使用 break 语句终止循环 --]
      break
   end
end

goto示例:

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

a = a+1
if a < 3 then
    goto label   -- a 小于 3 的时候跳转到标签 label
end

流程控制

常规的ifelse ifelse

--[ 定义变量 --]
a = 100

--[ 检查布尔条件 --]
if( a == 10 )
then
   --[ 如果条件为 true 打印以下信息 --]
   print("a 的值为 10" )
elseif( a == 20 )
then  
   --[ if else if 条件为 true 时打印以下信息 --]
   print("a 的值为 20" )
elseif( a == 30 )
then
   --[ if else if condition 条件为 true 时打印以下信息 --]
   print("a 的值为 30" )
else
   --[ 以上条件语句没有一个为 true 时打印以下信息 --]
   print("没有匹配 a 的值" )
end
print("a 的真实值为: ", a )

影翼

文章作者

发表回复

textsms
account_circle
email

jinzh notes

Lua简明教程(一)
前言 Lua 是一种轻量小巧的脚本语言,用标准C语言编写并以源代码形式开放, 其设计目的是为了嵌入应用程序中,从而为应用程序提供灵活的扩展和定制功能。 Lua 是巴西里约热内卢天主教大学…
扫描二维码继续阅读
2022-06-05