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
|
doprint("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
|
--声明一个关系类型的全局变量tabletable = {}--赋值关系变量table索引为0时的值是34table[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
|
-- 声明关系变量tabletable = { 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语句一定要在一个代码块结束前returnend |
函数举例
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
-- 声明函数类型变量sumfunction sum( v1,v2 ) -- 函数体 return v1 + v2end-- 同样函数变量也可以如下声明mul = function (v1,v2 ) -- 函数体 return v1 * v2end--调用第一个函数sumprint(sum(2,3))--调用第二个函数mulprint(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》这本书。
转自:http://www.cnblogs.com/daxiaxiaohao/p/4156695.html
Lua入门基础的更多相关文章
- 【quick-cocos2d-x】Lua 语言基础
版权声明:本文为博主原创文章,转载请注明出处. 使用quick-x开发游戏有两年时间了,quick-x是cocos2d-Lua的一个豪华升级版的框架,使用Lua编程.相比于C++,lua的开发确实快速 ...
- Lua入门记录
学习资料 Lua入门和Lua高阶章节 Lua中文文档 阅读笔记,只是记录了知识点和一些注意点,详细的看上面提供的学习资料链接 Lua 基础数据类型 nil(空) boolean(布尔) Lua 中 n ...
- 小白学 Python 爬虫(41):爬虫框架 Scrapy 入门基础(八)对接 Splash 实战
人生苦短,我用 Python 前文传送门: 小白学 Python 爬虫(1):开篇 小白学 Python 爬虫(2):前置准备(一)基本类库的安装 小白学 Python 爬虫(3):前置准备(二)Li ...
- mybatis入门基础(二)----原始dao的开发和mapper代理开发
承接上一篇 mybatis入门基础(一) 看过上一篇的朋友,肯定可以看出,里面的MybatisService中存在大量的重复代码,看起来不是很清楚,但第一次那样写,是为了解mybatis的执行步骤,先 ...
- 01shell入门基础
01shell入门基础 为什么学习和使用shell编程 shell是一种脚本语言,脚本语言是相对于编译语言而言的.脚本语言不需要编译,由解释器读取程序并且执行其中的语句,而编译语言需要编译成可执行代码 ...
- Markdown入门基础
// Markdown入门基础 最近准备开始强迫自己写博文,以治疗严重的拖延症,再不治疗就“病入骨髓,司命之所属,无奈何”了啊.正所谓“工欲善其事,必先利其器”,于是乎在写博文前,博主特地研究了下博文 ...
- JavaScript入门基础
JavaScript基本语法 1.运算符 运算符就是完成操作的一系列符号,它有七类: 赋值运算符(=,+=,-=,*=,/=,%=,<<=,>>=,|=,&=).算术运 ...
- C++ STL编程轻松入门基础
C++ STL编程轻松入门基础 1 初识STL:解答一些疑问 1.1 一个最关心的问题:什么是STL 1.2 追根溯源:STL的历史 1.3 千丝万缕的联系 1.4 STL的不同实现版本 2 牛刀小试 ...
- HTML入门基础教程相关知识
HTML入门基础教程 html是什么,什么是html通俗解答: html是hypertext markup language的缩写,即超文本标记语言.html是用于创建可从一个平台移植到另一平台的超文 ...
随机推荐
- hdu 5996 dingyeye loves stone(博弈)
题目链接:hdu 5996 dingyeye loves stone 题意: 给你一棵树,树的每一个节点有a[i]个石子,每个人可以将这个节点的石子移向它的父亲,如果没有合法操作,那么就算输,现在给你 ...
- leetcode 024
Given a linked list, swap every two adjacent nodes and return its head. For example,Given 1->2-&g ...
- angular中的cookie读写
AngularJS中对cookie的操作封装了一个单独的模块,模块名为ngCookies,若想使用需在页面中先引入angular-cookies.js: <script src="js ...
- Latex—IEEE Latex模板 期刊名带下划线的问题解决
其实期刊名应该是斜体字的,但是有可能默认模板会导致斜体变下划线的问题,解决方法如下 引用包: \usepackage{ulem} %to strike the words 然后再在: \bibliog ...
- IIS错误解决办法(HTTP Error 500.19 - Internal Server Error)
window10 切换登陆用户,VS2015的IIS Express 调试代码报HTTP Error 500.19 - Internal Server Error 错误,无法读取配置文件解决办法. I ...
- shrio初体验(1)
p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Monaco; color: #e6427a } p.p2 { margin: 0.0px 0 ...
- css animation 动画的制作
上效果 效果描述:原来这些图片都绝对定位在最右边,并有一个css3 3D的旋转初始效果.随着动画的开始,依次向左移动,并旋转到0度.(主要用于引导页步骤的描述) 上代码: html布局 <div ...
- C语言温度
#include <stdio.h> #include <stdlib.h> /* run this program using the console pauser or a ...
- 汇总前端最最常用的JS代码片段-你值得收藏
原始出处,可拷贝:http://www.w3cfuns.com/notes/25068/1d0d350a974d879e63f1115cf80a3288.html 摘自:http://www.love ...
- Dev的GridControl控件选择框的使用
先介绍环境:VS2010,dev11.2 想要达到的效果:,当单击某一行时前面的选择框选中. 在网上找了不少,但是感觉跟我想的做法很不一样(有很多都是再另外添加一个什么CheckBox,这个我在Dev ...