lua简易教程

合集下载

LUA 脚本语言0基础教程

LUA 脚本语言0基础教程

“red”是自己取名字的哪怕你取成 hongse 也没问题,这句话,已经创建了一个红色值为 255 的颜色对象。 接下来我们吧我们需要的文字打印到屏幕上! screen:print(230,135,"hello world",red) 在 x,y 用我们刚刚创建的颜色对象打印 hello world 的字样! 其实到这里,这个程序已经达到我们的目的了,但是这只有 2 个语句,一瞬间程序就已经 结束了,我们根本来不及看到效果, 那我们就做一个死循环,让他停柱 1 while true do 2 screen.flip() 3 screen.waitVblankStart() 4 end 看第一句,这是一个循环。 ture(真) 所以第一句可翻译成 要是 真就执行 。慢慢理解 来吧~~~ - - 不理解也没关系,往下看 然后第二句 :稍微介绍一下吧。Luaplayer for psp 采用了一种二级缓存的技术,所有的 图形在屏幕下方绘制好,必须要调用 screen.flip()才能吧滴二层屏幕的图形显示给我们看。 第三句:screen.flip()后面更上就对,不然效果就~~~~~(你自己去试试?) 第四句:end 没有什么太特殊的意义, 表示 while 循环体结束,不过注意了 这里它不会 去执行第 5 句,它会跳回第一句执行,因为是循环嘛^_^ 行啦 看看效果,颜色值你可以自己修改,要什么颜色就看你怎么改了,内容也可以改。你 改 "i kill you!" 也行的^_^ 要是你能看见如下效果,那说明两个事, 1.你的开发环境设置好了, 2.这节课你听懂了。 下课~~~~~ - -||
以后就会跳出整个 if 结构外执行,if else 语句,会在表达式计算为假以后,计算 else 后面 的语句,在跳出整个 if。 所以呢。本题的输出结果应该是 20!!! if else 语句的嵌套 例题 3: a = 10 if a > 10 then a=0 elseif a ~= 1 a = 20 end print(a) 解释,if else 的嵌套,其实就是在 if 结构里,在加上一个或者多个 if 语句,本人才疏学浅 - -|不太能解释清楚这个问题。还希望朋友们多多揣摩。 本例题。首先计算 a >10 结果为假于是跳转到 else~~elseif 在计算 a~=1(如果 a 不等 于 1)计算为真,于是执行了 a=20,所以输出结果是~20 下面我们接着讲循环结构语句 for 语句 for 语句的形式 for 变量=起始值,终止值 do 语句 1 语句 2 ……

Lua极简入门指南(一):基础知识篇

Lua极简入门指南(一):基础知识篇

Lua极简⼊门指南(⼀):基础知识篇本⽂是《Programming in Lua 3rd》读书笔记。

Chunks⼀个 Chunk 就是⼀组被执⾏的语句,例如⼀个⽂件或者交互模式下的⼀⾏。

标识符(identifiers)我们应该避免使⽤以 _ 开头并跟上⼀个或者多个⼤写字母的字符串来作标识符,它们被保留作特殊的⽤途(例如:_VERSION)。

注释单⾏注释使⽤复制代码代码如下:--多⾏注释使⽤复制代码代码如下:--[[ 和 --]]类型简介Lua 存在的数据类型包括:1.nil。

此类型只有⼀个值 nil。

⽤于表⽰“空”值。

全局变量默认为 nil,删除⼀个已经赋值的全局变量只需要将其赋值为 nil(对⽐ JavaScript,赋值 null 并不能完全删除对象的属性,属性还存在,值为 null)2.boolean。

此类型有两个值 true 和 false。

在 Lua 中,false 和 nil 都表⽰条件假,其他值都表⽰条件真(区别于 C/C++ 等语⾔的是,0 是真)3.number。

双精浮点数(IEEE 754 标准),Lua 没有整数类型4.string。

你可以保存任意的⼆进制数据到字符串中(包括 0)。

字符串中的字符是不可以改变的(需要改变时,你只能创建⼀个新的字符串)。

获取字符串的长度,可以使⽤ # 操作符(长度操作符)。

例如:print(#”hello”)。

字符串可以使⽤单引号,也可以使⽤双引号包裹,对于多⾏的字符串还可以使⽤ [[ 和 ]] 包裹。

字符串中可以使⽤转义字符,例如 \n \r 等。

使⽤ [[ 和 ]]包裹的字符串中的转义字符不会被转义erdata。

⽤于保存任意的 C 数据。

userdata 只能⽀持赋值操作和⽐较测试6.function。

函数是第⼀类值(first-class value),我们能够像使⽤其他变量⼀样的使⽤函数(函数能够保存在变量中,可以作为参数传递给函数)7.thread。

Lua脚本语言简明教程

Lua脚本语言简明教程

' single quote
[ left square bracket
] right square bracket
第十节:变量的定义
由于这种字符串只能写在一行中,因此,不可避免的要用到转义字符。加入了转义字符的串 ,看起来实在是不敢恭维,比如:
"one linennext linen"in quotes", 'in quotes'"
在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
举几个例子:
print(4 and 5) --> 5
[[a text between double brackets]]
</BODY>
</HTML>
]]
值得注意的是,在这种字符串中,如果含有单独使用的"[["或"]]"就仍然得用"["或"]"来避免歧 义。当然,这种情况是极少会发生的。
第十节:变量的定义
Table
关系表类型,这是一个很强大的类型
。相等表示两个变量引用的是同一个数据。比如:
a={1,2}
b=a
print(a==b, a~=b) -- true, false
a={1,2}
b={1,2}
print(a==b, a~=b) -- false, true

Lua脚本语言基础教程ppt课件

Lua脚本语言基础教程ppt课件

• 当表的索引是字符串的时候,我们可以简 写成:
T1.John={} T1.John.Age=27 T1.John.Gender=“Male“ 或 T1.John{Age=27, Gender="Male"}
Table注意点
• 所有元素之间,总是用逗号","隔开; • 所有索引值都需要用"["和"]"括起来;如果
是字符串,还可以去掉引号和中括号; • 如果不写索引,则索引就会被认为是数字,
并按顺序自动从1往后编;
• 表类型可以拥有任意类型的值,包括函数
t= { Age = 27 add = function(self, n) self.Age = self.Age+n end }
print(t.Age) -- 27 t.add(t, 10) print(t.Age) -- 37
Waldemar Celes
History • “SOL” – Simple Object Language, c. 1993 • PUC-Rio and Tecgraf • Petrobras • Major influences: SNOBOL, Icon, AWK, Bibtex, Scheme
关系表型,个型功能比大,参考后面的内容。
Function 函数型 ,函数也是一种型 ,所有的函数,它本身就是一个量。
Userdata
个 型用来和 Lua的宿主打交道的。宿主通常是用C和C++来写的,在种情况下, Userdata可以是宿主的任意数据型 ,常用的有Struct和指。
Luiz Henrique de Figueiredo
LUA在游戏开发中做什么?

Lua教程(二十二):userdata

Lua教程(二十二):userdata

Lua教程(⼆⼗⼆):userdata在Lua中可以通过⾃定义类型的⽅式与C语⾔代码更⾼效、更灵活的交互。

这⾥我们通过⼀个简单完整的⽰例来学习⼀下Lua 中userdata的使⽤⽅式。

需要说明的是,该⽰例完全来⾃于Programming in Lua。

其功能是⽤C程序实现⼀个Lua的布尔数组,以提供程序的执⾏效率。

见下⾯的代码和关键性注释。

复制代码代码如下:#include <lua.hpp>#include <lauxlib.h>#include <lualib.h>#include <limits.h>#define BITS_PER_WORD (CHAR_BIT * sizeof(int))#define I_WORD(i) ((unsigned int)(i))/BITS_PER_WORD#define I_BIT(i) (1 << ((unsigned int)(i)%BITS_PER_WORD))typedef struct NumArray {int size;unsigned int values[1];} NumArray;extern "C" int newArray(lua_State* L){//1. 检查第⼀个参数是否为整型。

以及该参数的值是否⼤于等于1.int n = luaL_checkint(L,1);luaL_argcheck(L, n >= 1, 1, "invalid size.");size_t nbytes = sizeof(NumArray) + I_WORD(n - 1) * sizeof(int);//2. 参数表⽰Lua为userdata分配的字节数。

同时将分配后的userdata对象压⼊栈中。

NumArray* a = (NumArray*)lua_newuserdata(L,nbytes);a->size = n;for (int i = 0; i < I_WORD(n - 1); ++i)a->values[i] = 0;//获取注册表变量myarray,该key的值为metatable。

Lua教程(一):在C++中嵌入Lua脚本

Lua教程(一):在C++中嵌入Lua脚本

Lua教程(⼀):在C++中嵌⼊Lua脚本本系列教程主要介绍如何在C/C++程序⾥⾯嵌⼊Lua脚本,我打算从以下⼏个⽅⾯来介绍:1.如何在C/C++⾥⾯嵌⼊Lua脚本2.Lua访问C/C++数据结构(这⾥⾯要介绍类,结构体,函数,变量,枚举等数据类型在lua⾥⾯如何访问)3.C/C++访问Lua的数据,主要是基本数据类型,函数和Table4.Cocos2D-X⾥⾯的Lua绑定(含⾃动绑定与⼿动绑定)5.Cocos2D-x⾥⾯Lua和C/C++相互调⽤6.Cocos2D-x⾥⾯Lua和Java相互调⽤7.Cocos2D-x⾥⾯Lua和Objective-C相互调⽤本系列教程不会过多地介绍Lua的基本语法,关于Lua基本语法的学习,推荐《Programming In Lua》。

如有纰漏,欢迎指出,谢谢。

另外,关于更新时间,每周⼀篇,定期或者不定期,呵呵。

Mac项⽬集成Lua准备⼯作⾸先,新建⼀个控制台应⽤程序。

打开Xcode,New->Project->OSX->Command Line Tool,取名为Lesson01如下图所⽰:接下来,我们需要下载lua5.2.3.下载完后,解压缩,然后cd到刚刚解压缩的路径下⾯,输⼊make macosx,这样便可以⽣成Mac下⾯的lib⽂件。

接下来把刚刚解压缩的⽂件夹拷贝到你新建的⼯程下⾯,然后设置include路径和library路径。

(注意,这⾥是不需要把头⽂件添加到Xcode⾥⾯的,只要指定include路径,编译的时候,编译器会⾃动去找的。

)因为我的Lua⽂件夹的路径是:xxxx/Lesson01/lua-5.2.3,所以,我把search path和library path分别设置为:复制代码代码如下://search path$(SRCROOT)/Lesson01/lua-5.2.3/src///library path$(PROJECT_DIR)/Lesson01下⾯是我的⼯程与lua之间的⽬录结构,liblua.a⽂件是从src⾥⾯拷贝出来的。

lua语言零基础教程

lua语言零基础教程

lua语言零基础教程Lua语言零基础教程:Lua是一种功能强大的脚本编程语言,主要用于扩展和嵌入其他应用程序中。

它具有简单易学、轻量级的特点,常被用于游戏开发、网络编程以及嵌入式设备上。

1. 安装Lua:首先,你需要下载并安装Lua解释器。

你可以在Lua官方网站上找到适合你操作系统的安装程序。

安装完成后,你可以在命令行中运行"lua"命令来启动Lua解释器。

2. 基本语法:Lua的语法非常简洁和易懂。

以下是一些基本的语法规则:- 注释:使用"--"来添加单行注释。

例如:-- 这是一个注释。

- 变量:Lua中的变量是全局的,并且无需事先声明类型。

你可以直接对变量赋值。

例如:x = 10。

- 数据类型:Lua支持多种数据类型,包括数字、字符串、布尔值、表、函数等。

例如:x = 10;str = "Hello World";flag = true。

- 循环和条件语句:Lua中的循环和条件语句与其他编程语言类似。

你可以使用"if"语句来进行条件判断,使用"for"和"while"语句来进行循环操作。

- 函数:Lua中的函数定义使用关键字"function",你可以定义自己的函数,并在程序中进行调用。

3. 基本操作:Lua提供了一些基本的操作符,包括算术运算符、比较运算符和逻辑运算符等。

你可以使用这些操作符对变量进行计算和比较。

4. 表(Table):Lua中的表相当于其他编程语言中的数组或字典。

你可以使用表来存储和操作数据。

表可以包含多个键值对,可以根据键来获取对应的值。

5. 文件操作:Lua提供了一些函数用于文件的读写操作。

你可以使用这些函数来读取文件内容、写入文件或者对文件进行其他操作。

这只是Lua语言的一些基础知识,希望能对你入门Lua编程有所帮助。

如果你对Lua感兴趣,可以进一步学习Lua的高级特性和应用。

Lua语言新手简单入门教程

Lua语言新手简单入门教程

Lua语⾔新⼿简单⼊门教程⼀、前⾔Lua 是⼀种轻量⼩巧的脚本语⾔,⽤标准 C 语⾔编写并以源代码形式开放,其设计⽬的是为了嵌⼊应⽤程序中,从⽽为应⽤程序提供灵活的扩展和定制功能。

Lua 可以应⽤在游戏开发、独⽴应⽤脚本、Web 应⽤脚本、扩展和数据库插件、安全系统等场景。

笔者学习的⽬的主要是为了能在 Web 应⽤(Nginx、Redis)中使⽤到 Lua 脚本。

特点Lua脚本可以很容易的被C/C++ 代码调⽤,也可以反过来调⽤C/C++的函数。

Lua由标准C编写⽽成,代码简洁优美,⼏乎在所有操作系统和平台上都可以编译,运⾏。

以极⼩的体积和简单的语法提供全⾯的功能。

[⼀个完整的Lua解释器不过200k,在⽬前所有脚本引擎中,Lua的速度是最快的]实现与宿主语⾔的简洁接⼝成为⼀个很容易嵌⼊其它语⾔中使⽤的语⾔。

特性⽀持⾯向对象编程轻量级可扩展函数式编程⾃动内存管理通⽤类型的表–table,可实现数组,哈希表,集合,对象⽀持闭包⽀持多线程⽀持交互式编程⼆、安装注意:请确保安装 Lua 之前系统已安装 readline 和 readline-devel。

如果没有则键⼊yum install -y readline readline-devel 进⾏安装。

curl -R -O /ftp/lua-5.3.4.tar.gztar zxf lua-5.3.4.tar.gzcd lua-5.3.4make linux test测试,命令⾏中键⼊ lua -v:Lua 5.1.4 Copyright (C) 1994-2008 , PUC-Rio显⽰ Lua 版本说明安装正确。

三、运⾏⽅式与其他脚本语⾔⼀样,我们需要将 Lua 代码编写在⽂件中,后缀名为 .lua。

运⾏该⽂件的代码时,只需在命令⾏键⼊ lua xx.lua 即可。

四、语法4.1 数据类型Lua 中包含 8 种基本数据类型,即:nil、boolean、number、string、userdata、function、thread 和 table。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Lua脚本语法说明(修订)Posted on 2006-08-04 11:39 沐枫阅读(3512) 评论(9)编辑收藏引用网摘所属分类: C++Lua脚本语法说明(增加lua5.1部份特性)Lua 的语法比较简单,学习起来也比较省力,但功能却并不弱。

所以,我只简单的归纳一下Lua的一些语法规则,使用起来方便好查就可以了。

估计看完了,就懂得怎么写Lua程序了。

在Lua中,一切都是变量,除了关键字。

I. 首先是注释写一个程序,总是少不了注释的。

在Lua中,你可以使用单行注释和多行注释。

单行注释中,连续两个减号"--"表示注释的开始,一直延续到行末为止。

相当于C++语言中的"//"。

多行注释中,由"--[["表示注释开始,并且一直延续到"]]"为止。

这种注释相当于C语言中的"/*...*/"。

在注释当中,"[["和"]]"是可以嵌套的(在lua5.1中,中括号中间是可以加若干个"="号的,如[==[ ... ]==]),见下面的字符串表示说明。

II. Lua编程经典的"Hello world"的程序总是被用来开始介绍一种语言。

在Lua中,写一个这样的程序很简单:print("Hello world")在Lua中,语句之间可以用分号";"隔开,也可以用空白隔开。

一般来说,如果多个语句写在同一行的话,建议总是用分号隔开。

Lua 有好几种程序控制语句,如:注意一下,for的循环变量总是只作用于for的局部变量;当省略步进值时,for循环会使用1作为步进值。

使用break可以用来中止一个循环。

相对C语言来说,Lua有几个地方是明显不同的,所以面要特别注意一下:.语句块语句块在C中是用"{"和"}"括起来的,在Lua中,它是用do 和end 括起来的。

比如:do print("Hello") end可以在函数中和语句块中定局部变量。

.赋值语句赋值语句在Lua被强化了。

它可以同时给多个变量赋值。

例如:a,b,c,d=1,2,3,4甚至是:a,b=b,a -- 多么方便的交换变量功能啊。

在默认情况下,变量总是认为是全局的。

假如需要定义局部变量,则在第一次赋值的时候,需要用local说明。

比如:local a,b,c = 1,2,3 -- a,b,c都是局部变量.数值运算和C语言一样,支持+, -, *, /。

但Lua还多了一个"^"。

这表示指数乘方运算。

比如2^3 结果为8, 2^4结果为16。

连接两个字符串,可以用".."运处符。

如:"This a " .. "string." -- 等于"this a string".比较运算所有这些操作符总是返回true或false。

对于Table,Function和Userdata类型的数据,只有== 和~=可以用。

相等表示两个变量引用的是同一个数据。

比如:a={1,2}b=aprint(a==b, a~=b) --输出 true, falsea={1,2}b={1,2}print(a==b, a~=b) --输出 false, true.逻辑运算and, or, not其中,and 和or 与C语言区别特别大。

在这里,请先记住,在Lua中,只有false和nil才计算为false,其它任何数据都计算为true,0也是true!and 和or的运算结果不是true和false,而是和它的两个操作数相关。

a and b:如果a为false,则返回a;否则返回ba or b:如果a 为true,则返回a;否则返回b举几个例子:print(4and5) --输出 5print(nil and13) --输出 nilprint(false and13) --输出 falseprint(4or5) --输出 4print(false or5) --输出 5在Lua中这是很有用的特性,也是比较令人混洧的特性。

我们可以模拟C语言中的语句:x = a? b : c,在Lua中,可以写成:x = a and b or c。

最有用的语句是:x = x or v,它相当于:if not x then x = v end 。

.运算符优先级,从低到高顺序如下:和C语言一样,括号可以改变优先级。

III. 关键字关键字是不能做为变量的。

Lua的关键字不多,就以下几个:IV. 变量类型怎么确定一个变量是什么类型的呢?大家可以用type()函数来检查。

Lua支持的类型有以下几种:V. 变量的定义所有的语言,都要用到变量。

在Lua 中,不管在什么地方使用变量,都不需要声明,并且所有的这些变量总是全局变量,除非我们在前面加上"local"。

这一点要特别注意,因为我们可能想在函数里使用局部变量,却忘了用local 来说明。

至于变量名字,它是大小写相关的。

也就是说,A 和a 是两个不同的变量。

定义一个变量的方法就是赋值。

"="操作就是用来赋值的 我们一起来定义几种常用类型的变量吧。

A. Nil正如前面所说的,没有使用过的变量的值,都是Nil 。

有时候我们也需要将一个变量清除,这时候,我们可以直接给变量赋以nil 值。

如:var1=nil -- 请注意 nil 一定要小写B. Boolean布尔值通常是用在进行条件判断的时候。

布尔值有两种:true 和 false 。

在Lua 中,只有false 和nil 才被计算为false ,而所有任何其它类型的值,都是true 。

比如0,空串等等,都是true 。

不要被 C 语言的习惯所误导,0在Lua 中的的确确是true 。

你也可以直接给一个变量赋以Boolean 类型的值,如:theBoolean = trueC. Number在Lua中,是没有整数类型的,也不需要。

一般情况下,只要数值不是很大(比如不超过100,000,000,000,000),是不会产生舍入误差的。

在WindowsXP能跑的当今主流PC上,实数的运算并不比整数慢。

实数的表示方法,同C语言类似,如:4 0.4 4.57e-3 0.3e12 5e+20D. String字符串,总是一种非常常用的高级类型。

在Lua中,我们可以非常方便的定义很长很长的字符串。

字符串在Lua中有几种方法来表示,最通用的方法,是用双引号或单引号来括起一个字符串的,如:"That's go!"或'Hello world!'和C语言相同的,它支持一些转义字符,列表如下:\a bell\b back space\f form feed\n newline\r carriage return\t horizontal tab\v vertical tab\\ backslash\" double quote\" single quote\[ left square bracket\] right square bracket由于这种字符串只能写在一行中,因此,不可避免的要用到转义字符。

加入了转义字符的串,看起来实在是不敢恭维,比如:"one line\nnext line\n\"in quotes\", "in quotes""一大堆的"\"符号让人看起来很倒胃口。

如果你与我有同感,那么,我们在Lua中,可以用另一种表示方法:用"[["和"]]"将多行的字符串括起来。

(lua5.1: 中括号中间可以加入若干个"="号,如[==[ ... ]==],详见下面示例)示例:下面的语句所表示的是完全相同的字符串:a ='alo\n123"'a ="alo\n123\""a ='\97lo\10\04923"'a =[[alo123"]]a =[==[alo123"]==]值得注意的是,在这种字符串中,如果含有单独使用的"[["或"]]"就仍然得用"\["或"\]"来避免歧义。

当然,这种情况是极少会发生的。

E. Table关系表类型,这是一个很强大的类型。

我们可以把这个类型看作是一个数组。

只是C语言的数组,只能用正整数来作索引;在Lua中,你可以用任意类型来作数组的索引,除了nil。

同样,在C语言中,数组的内容只允许一种类型;在Lua中,你也可以用任意类型的值来作数组的内容,除了nil。

Table的定义很简单,它的主要特征是用"{"和"}"来括起一系列数据元素的。

比如:T1 = {} -- 定义一个空表T1[1]=10-- 然后我们就可以象C语言一样来使用它了。

T1["John"]={Age=27, Gender="Male"}这一句相当于:T1["John"]={} -- 必须先定义成一个表,还记得未定义的变量是nil类型吗T1["John"]["Age"]=27T1["John"]["Gender"]="Male"当表的索引是字符串的时候,我们可以简写成:T1.John={}T1.John.Age=27T1.John.Gender="Male"或T1.John{Age=27, Gender="Male"}这是一个很强的特性。

在定义表的时候,我们可以把所有的数据内容一起写在"{"和"}"之间,这样子是非常方便,而且很好看。

比如,前面的T1的定义,我们可以这么写:T1={10, -- 相当于 [1] = 10[100]=40,John=-- 如果你原意,你还可以写成:["John"] ={Age=27, -- 如果你原意,你还可以写成:["Age"] =27Gender=Male -- 如果你原意,你还可以写成:["Gender"] =Male},20-- 相当于 [2] = 20}看起来很漂亮,不是吗?我们在写的时候,需要注意三点:第一,所有元素之间,总是用逗号","隔开;第二,所有索引值都需要用"["和"]"括起来;如果是字符串,还可以去掉引号和中括号;第三,如果不写索引,则索引就会被认为是数字,并按顺序自动从1往后编;表类型的构造是如此的方便,以致于常常被人用来代替配置文件。

相关文档
最新文档