Lua入门教程

简介:

什么是Lua
  Lua 是一个小巧的脚本语言。是巴西里约热内卢天主教大学(Pontifical Catholic University of Rio de Janeiro)里的一个研究小组,由Roberto Ierusalimschy、Waldemar Celes 和 Luiz Henrique de Figueiredo所组成并于1993年开发。 其设计目的是为了嵌入应用程序中,从而为应用程序提供灵活的扩展和定制功能。Lua由标准C编写而成,几乎在所有操作系统和平台上都可以编译,运行。Lua并没有提供强大的库,这是由它的定位决定的。所以Lua不适合作为开发独立应用程序的语言。Lua 有一个同时进行的GIT项目,提供在特定平台上的即时编译功能。   Lua脚本可以很容易的被C/C++ 代码调用,也可以反过来调用C/C++的函数,这使得Lua在应用程序中可以被广泛应用。不仅仅作为扩展脚本,也可以作为普通的配置文件,代替XML,ini等文件格式,并且更容易理解和维护。 Lua由标准C编写而成,代码简洁优美,几乎在所有操作系统和平台上都可以编译,运行。 一个完整的Lua解释器不过200k,在目前所有脚本引擎中,Lua的速度是最快的。这一切都决定了Lua是作为嵌入式脚本的最佳选择

Lua里的注释
单行注释

使用两个减号表示注释的开始,一直延续到行末位置。相当于C语言中的"//"。

1
2
--这里是一行注释
print("Hello Lanou")
多行注释

使用"--[["表示注释开始,使用"]]"表示注释结束。这种注释相当于C语言中的"/"和"/"。

1
2
3
--[[这里是第一行注释
这里是第二行注释]]
pring("Hello Lanou")
Lua里的变量
在默认情况下,Lua里认为所有的变量都是全局变量。假如需要定义局部变量,则在声明变量时需要使用local说明。

并且在赋值的时候,允许同时给多个变量进行赋值。

1
2
3
4
5
6
7
8
9
10
11
-- i是一个局部变量
local i = 1

-- name是一个全局变量
name = "Lewis"

-- age,height都是局部变量
local age,height = 34,183.5

-- gender,company都是全局变量
gender,company = "男","蓝鸥"
  

Lua里的运算符
算数运算符

1
2
3
4
5
6
7
8
9
10
11
12
13
14
-- +(加法)
print(1 + 2)

-- -(减法)
print(1 - 2)

-- *(乘法)
print(1 * 2)

-- /(除法)
print(1 / 2)

-- ^(乘方)
print(1 ^ 2)
比较运算符

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
-- <(小于)
print(1 < 2)

-- >(大于)
print(1 > 2)

-- <=(小于等于)
print(1 <= 2)

-- >=(大于等于)
print(1 / 2)

-- ==(等于等于)
print(1 == 2)

-- ~=(不等于)
print(1 ~= 2)
逻辑运算符

在使用逻辑运算符时与C语言差别很大。

在Lua语言里,只有false和nil才为false,其他任何数据都是true,0也是true!!!

and 和 or 的运算结果不是true和false,而是和他的两个操作数相关。

a and b:如果a为false,则返回a;否则,返回b;

a or b:如果a为true,则返回a;否则,返回b;

1
2
3
4
5
6
7
8
-- and(与)
print(1 and 2)

-- or(或)
print(1 or 2)

-- not(非)
print(1 not 2)
通过Lua里的这种特性,可以模拟C语言中的 ?:运算符

例如:C语言中的 x=a?b : c,在Lua中,可以写成 x = a and b or c。

Lua里的数据类型
关键字 描述
nil 空值,所有没有使用过的变量都是nil;nil既是值,又是数据类型
boolean 布尔类型,只有两个有效的值:true和false
number 数值类型,在Lua里,相当于C语言里的double
string 字符串,如果愿意的话,字符串是可以包含"0"字符的
table 关系类型,这个类型的功能比较强大
function 函数类型,可以由函数类型来声明变量
userdata 这个类型专门与Lua的宿主打交道。宿主通常是由c语言和c++语言开发的,在这种情况下,userdata可以是宿主的任何类型,常用的是结构体和指针类型
thread 线程类型,在Lua里没有真正的线程。
Lua里的代码块
在C语言中代码块是有"{"和"}"括起来的,在Lua中,使用do和end关键字括起来的。

1
2
3
do
print("Hello")
end
Lua里的关系类型
关系类型,是一个非常强大的类型。这个类型类似于C++语言里的映射结构,类似于PHP语言里的array对象,类似于OC里的NSDictionary对象。

在Lua里的关系类型(Table)定义很简单,它主要特征是使用"{"和"}"来括起来一系列的元素。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
--声明一个关系类型的全局变量table
table = {}

--赋值关系变量table索引为0时的值是34
table[0] = 34

--同时也可以写成 table.name = "Lewis"
table["name"] = "Lewis"
table.gender = "男"

--同样也可以将索引为"son"的对象写成另外一个表格
table["son"] = {name = "DD",gender = "男"}

--访问对象时就可以使用
print(table.son.name)
同样也可以如下声明

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
-- 声明关系变量table
table = {

10,--相当于[1] = 10
[100] = 40,
lewis = { -- 同样也可以写成 ["lewis"] =
    age = 34, -- 同样可以写成 ["age"] = 34
    gender = "male",
},

20, --相当于[2] = 20

}

print(table[2])
Lua里的函数
在Lua中,函数的定义非常简单。不过要注意的一点就是,return语句一定要写在end之前。假如我们非要在函数中加一个return语句,那就应该写成

1
2
3
4
do
--return语句一定要在一个代码块结束前
return
end
函数举例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
-- 声明函数类型变量sum
function sum( v1,v2 )

-- 函数体
return v1 + v2

end

-- 同样函数变量也可以如下声明
mul = function (v1,v2 )

-- 函数体
return v1 * v2

end

--调用第一个函数sum
print(sum(2,3))
--调用第二个函数mul
print(mul(3,4))
Lua里的类
前边曾经说过,表类型可以拥有任意类型的值,包括函数!

因此,我们就可以创建一个具有函数变量的表。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
lewis = {

age = 34,
work = function (self,message)
    -- 函数体
    self.age = self.age + 1;
    print(self.age .. message)
end

}

print(lewis.age)
lewis.work(lewis,"上班")

--也可以如下调用方法
lewis:work("上班")

结束

就像C语言一样,Lua里提供了很多的标准函数库来增强语言的功能。使用这些函数,可以很方便的操作各种数据类型。

可以参考《Programming in Lua》这本书。
本文转自jiahuafu博客园博客,原文链接http://www.cnblogs.com/jiahuafu/p/8289668.html如需转载请自行联系原作者

jiahuafu

相关文章
|
6月前
|
C语言
Lua快速入门教程1
Lua快速入门教程1
54 2
|
C++
lua的入门教程-- C++(四)
  本文讲述如何使用tolua++,如果还没有编译tolua++库,请访问上一节内容。   还没想好怎么编辑内容,毕竟代码算是公司的代码,不能都写在这。   
745 0
|
C++
lua的入门教程-- C++(二)
     在上一节中,讲述了如何产生一个lua的静态链接库,在这一节,将讲述简单使用lua5.1.lib的过程。      首先先建立一个新的win32 Console Application,在新工程里,为了美观,我将默认生成的文件夹删除,建立了include和src两个文件夹。在根目录下建立了三个文件夹:lib,script,include。              
1091 0
|
C++
lua的入门教程-- C++(三)
 本文讲述使用tolua++这个第三方库,tolua++是一种第三方的软件包,可以为lua提供面向对象的特性。  官方下载地址:http://www.codenix.com/~tolua/  如果地址失效,可以到我的资源中下载:  http://download.csdn.net/detail/alex_my/6723687 本文使用lua5.1.5,tolua++-1.0
1328 0
|
C++
lua的入门教程-- C++(一)
    本文讲述从www.lua.org下载源码到使用的过程,是一个及其简单的使用入门教程,不涉及语法内容,如有错误,请指出。     准备:VS2008,lua源码     首先先到官网下载源码,本文没有下载最新版本5.2.1,而是采用了5.1.5版本(后边使用的tolua++不支持5.2以上的lua,需要修改才支持,点击这里查看修改方法)。将其解压,我们即将用到里边src文件夹中的
1139 0
|
6月前
|
存储 NoSQL Redis
Redis的Lua脚本有什么作用?
Redis Lua脚本用于减少网络开销、实现原子操作及扩展指令集。它能合并操作降低网络延迟,保证原子性,替代不支持回滚的事务。通过脚本,代码复用率提高,且可自定义指令,如实现分布式锁,增强Redis功能和灵活性。
243 1
|
1月前
|
缓存 分布式计算 NoSQL
大数据-43 Redis 功能扩展 Lua 脚本 对Redis扩展 eval redis.call redis.pcall
大数据-43 Redis 功能扩展 Lua 脚本 对Redis扩展 eval redis.call redis.pcall
25 2
|
5月前
|
消息中间件 NoSQL Java
Redis系列学习文章分享---第六篇(Redis实战篇--Redis分布式锁+实现思路+误删问题+原子性+lua脚本+Redisson功能介绍+可重入锁+WatchDog机制+multiLock)
Redis系列学习文章分享---第六篇(Redis实战篇--Redis分布式锁+实现思路+误删问题+原子性+lua脚本+Redisson功能介绍+可重入锁+WatchDog机制+multiLock)
227 0
|
2月前
|
存储 JSON Ubuntu
如何使用 Lua 脚本进行更复杂的网络请求,比如 POST 请求?
如何使用 Lua 脚本进行更复杂的网络请求,比如 POST 请求?
下一篇
无影云桌面