Lua基础语法

这篇博客详细介绍了Lua的基础语法,包括注释、数据类型(如nil、boolean、number、string、table、function、userdata)、变量、循环(while、for及循环类型)、函数(如函数作为参数、多返回值、闭包)、运算符、字符串和table的操作,以及模块与包、迭代器和协同程序的概念。内容深入浅出,适合初学者和进阶者学习。
摘要由CSDN通过智能技术生成

Lua基础语法

注释

  • 单行注释
    两个减号,--
  • 多行注释
    --[[
    内容
    --]]

数据类型

  • Lua是动态类型语言,变量不需要类型定义,只需为变量赋值
数据类型 描述
nil 只有值”nil”属于该类,表示一个无效值(在条件表达式里相当于false)
boolean false 和 true
number 双精度类型的实浮点数
string 由一对双引号" "或单引号' '表示
function 由C或Lua编写的函数
userdata 表示任意存储在变量中的C数据结构
thread 表示执行的独立线路
table Lua 中的表(table)其实是一个”关联数组”(associative arrays),数组的索引可以是数字或者是字符串。在 Lua 里,table 的创建是通过”构造表达式”来完成,最简单构造表达式是{},用来创建一个空表。

nil

  • nil类型表示一种没有任何有效值,它只有一个值”nil”
  • 对于全局变量和table,nil的另外一个作用为删除,给全局变量或table表里的变量赋值nil,等于把它们删掉

boolean

  • Lua把false和nil看作“假”,其余为“真”

number

  • Lua默认只有一种number类型,即double(双精度)类型,默认类型可以修改luaconf.h里的定义。以下几种写法都是number类型
>print(type(2))
>print(type(2.2))
>print(type(0.2))
>print(type(2e+1))
>print(type(0.2e-1))
>print(type(7.8263692594256e-06))

number
number
number
number
number
number

string

  • 由一对双引号" "或单引号' '表示
  • 两个方括号[[ ]]表示一块字符串
>html = [[
<html>
<head></head>
<body>
    <a href="http://www.w3cschool.cc/">w3cschool菜鸟教程</a>
</body>
</html>
]]
print(html)

<html>
<head></head>
<body>
    <a href="http://www.w3cschool.cc/">w3cschool菜鸟教程</a>
</body>
</html>
  • 在对一个数字字符串上进行算术操作时,Lua会将数字字符串转成一个数字
> print("2" + 6)
8.0
> print("2" + "6")
8.0
> print("2 + 6")
2 + 6
> print("-2e2" * "6")
-1200.0
> print("error" + 1)
stdin:1: attempt to perform arithmetic on a string value
stack traceback:
    stdin:1: in main chunk
    [C]: in ?
> 
  • 字符串连接需要用..,需加上空格
>print('a' .. 'b')
ab

>print(157 .. 333)
157333
  • 使用#计算字符串的长度,放在字符串前面
>len='www.w3cshool.cc'
>print(#len)
16
>print(#'www.w3cschool.cc')
16

table

--创建一个空表
local table1={}

--初始表
local table2={
  'apple','pear','orange','grape'}
  • Lua中的table是一个”关联数组”,数组的索引可以数字或字符串
    **【注】**Lua中table 默认初始索引从1开始
a={}
a['key']='value'
key=10
a[key]=22
a[key]=a[key]+11

for k,v in ipairs(a) do
    print(k .. ':' .. v)
end

结果
key:value
10:33

function

  • 在Lua中,function被看作是”第一类值(First-Class Value)”,函数可以存在变量里
function factorial1(n)
    if n==0 then
        return 1
    else
        return n*factorial1(n-1)
    end
end

print(factorial1(5))

factorial2=factorial1
print(fatorial2(5))

结果
120
120

userdata

userdata 是一种用户自定义数据,用于表示一种由应用程序或 C/C++ 语言库所创建的类型,可以将任意 C/C++ 的任意数据类型的数据(通常是 struct 和 指针)存储到 Lua 变量中调用。

变量

  • 变量在使用前,必须在代码中进行声明,即创建该变量。
  • Lua 变量有三种类型:全局变量、局部变量、表中的域
  • 变量的默认值均为 nil。

标识符

  • 一般用下划线加大写字母的标识符,为Lua的保留字。如:_VERSION 为保留用于Lua内部全局变量
  • 区分大小写

全局变量

  • 默认是全局变量
  • 全局变量无需声明,给一个变量赋值后即创建了这个全局变量,访问一个没有初始化的全局变量也不会出错,得到的结果为:nil
print(b)
>nil
b=10
print(b)
>10
  • 删除一个全局变量,将变量赋值为nil即可
b=nil
print(b)
>nil

局部变量

使用local声明
应该尽可能的使用局部变量,有两个好处:
1. 避免命名冲突。
2. 访问局部变量的速度比全局变量更快。

赋值语句

  • Lua可以对多个变量同时赋值,变量列表和值列表的各个元素用逗号分开,赋值语句右边的值会依次赋给左边的变量。
a, b = 10, 2*x       <-->       a=10; b=2*x
  • 遇到赋值语句Lua会先计算右边所有的值然后再执行赋值操作,所以我们可以这样进行交换变量的值:
x, y = y, x                     -- swap 'x' for 'y'
a[i], a[j] = a[j], a[i]         -- swap 'a[i]' for 'a[j]'
  • 当变量个数和值的个数不一致时,Lua会一直以变量个数为基础采取以下策略:
    1. 变量个数 > 值的个数 按变量个数补足nil
    2. 变量个数 < 值的个数 多余的值会被忽略
>a, b, c = 0, 1
>print(a,b,c)             

0   1   nil

>a, b = a+1, b+1, b+2     -- value of b+2 is ignored
>print(a,b)               
>1   2

>a, b, c = 0
>print(a,b,c)             

0   nil   nil
  • 多值赋值经常用来交换变量,或将函数调用返回给变量:
a,b=fun()

f()返回两个值,第一个赋给a,第二个赋给b。

循环

while

while(condition)
do
    statements
end

for

Lua中for语句有两大类:
* 数值for循环
* 泛型for循环

数值for循环
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值