lua
wxh_无香花自开
这个作者很懒,什么都没留下…
展开
-
2.lua学习笔记:调试、运行
一:运行方式 1.在命令行中输入lua,进入lua解释器,输入命令这样就能和运行Python解释器一样操作 2.编写lua脚本,在命令行中输入lua tmp.lua即可运行tmp.lua脚本 3.在lua解释器中输入dofile("tmp.lua"),也能运行tmp.lua脚本,同时也导入了tmp.lua文件内的函数 4.在命令行中输入lua -i tmp原创 2014-12-01 18:30:52 · 643 阅读 · 0 评论 -
18.lua学习笔记:系统库
Lua为了保证高度的可移植性,因此,它的标准库仅仅提供了非常少的功能,特别是和OS相关的库。但是Lua还提供了一些扩展库,比如Posix库等。对于文件操作而言,该库仅提供了os.rename函数和os.remove函数。 1. 日期和时间: 在Lua中,函数time和date提供了所有的日期和时间功能。 如果不带任何参数调用time函数,它将以数字形式返回转载 2014-12-07 16:56:07 · 464 阅读 · 0 评论 -
16.lua学习笔记:字符串库
1. 基础字符串函数: 字符串库中有一些函数非常简单,如: 1). string.len(s) 返回字符串s的长度; 2). string.rep(s,n) 返回字符串s重复n次的结果; 3). string.lower(s) 返回s的副本,其中所有的大写都被转换为了小写形式,其他字符不变; 4). string.upper(s) 和lower相反转载 2014-12-07 16:53:16 · 408 阅读 · 0 评论 -
15.lua学习笔记:table弱引用
Lua采用了基于垃圾收集的内存管理机制,因此对于程序员来说,在很多时候内存问题都将不再困扰他们。然而任何垃圾收集器都不是万能的,在有些特殊情况下,垃圾收集器是无法准确的判断是否应该将当前对象清理。这样就极有可能导致很多垃圾对象无法被释放。为了解决这一问题,就需要Lua的开发者予以一定程度上的配合。比如,当某个table对象被存放在容器中,而容器的外部不再有任何变量引用该对象,对于这样的对象,Lua转载 2014-12-07 16:51:43 · 473 阅读 · 0 评论 -
13.lua学习笔记:模块与包
从Lua 5.1开始,我们可以使用require和module函数来获取和创建Lua中的模块。从使用者的角度来看,一个模块就是一个程序库,可以通过require来加载,之后便得到一个类型为table的全局变量。此时的table就像名字空间一样,可以访问其中的函数和常量,如: 1 require "mod" 2 mod.foo() 3 local m2 = require "mod2" 4 l转载 2014-12-05 00:21:26 · 703 阅读 · 0 评论 -
10.lua学习笔记:数据持久化
1. 数据文件: 我们可以利用Lua中table的构造式来定义一种文件格式,即文件中的数据是table构造并初始化的代码,这种方式对于Lua程序而言是非常方便和清晰的,如: Entry { "Stephen Liu", "Male", "Programmer", "BS" } Entry { "Jerry Tian", "Male", "Programmer", "B转载 2014-12-04 20:19:18 · 413 阅读 · 0 评论 -
14.lua学习笔记:面向对象
Lua中的table就是一种对象,但是如果直接使用仍然会存在大量的问题,见如下代码: 1 Account = {balance = 0} 2 function Account.withdraw(v) 3 Account.balance = Account.balance - v 4 end 5 --下面是测试调用函数 6 Account.withdraw(100.00)转载 2014-12-05 00:53:13 · 445 阅读 · 0 评论 -
12.lua学习笔记:环境
Lua将其所有的全局变量保存在一个常规的table中,这个table被称为“环境”。它被保存在全局变量_G中。 1. 全局变量声明: Lua中的全局变量不需要声明就可以使用。尽管很方便,但是一旦出现笔误就会造成难以发现的错误。我们可以通过给_G表加元表的方式来保护全局变量的读取和设置,这样就能降低这种笔误问题的发生几率了。见如下示例代码: 1 --该table用于存转载 2014-12-04 23:08:12 · 465 阅读 · 0 评论 -
11.lua学习笔记:元表与元方法
Lua中提供的元表是用于帮助Lua数据变量完成某些非预定义功能的个性化行为,如两个table的相加。假设a和b都是table,通过元表可以定义如何计算表达式a+b。当Lua试图将两个table相加时,它会先检查两者之一是否有元表,然后检查该元表中是否存在__add字段,如果有,就调用该字段对应的值。这个值就是所谓的“元方法”,这个函数用于计算table的和。 Lua中每个值都有一个元表。转载 2014-12-04 21:03:56 · 433 阅读 · 0 评论 -
6.lua学习笔记:迭代器和for泛型
1. 迭代器与Closure: 在Lua中,迭代器通常为函数,每调用一次函数,即返回集合中的“下一个”元素。每个迭代器都需要在每次成功调用之间保持一些状态,这样才能知道它所在的位置和下一次遍历时的位置。从这一点看,Lua中closure机制为此问题提供了语言上的保障,见如下示例: 1 function values(t) 2 local i = 0 3 r转载 2014-12-03 16:48:23 · 446 阅读 · 0 评论 -
9.lua学习笔记:数据结构
Lua中的table不是一种简单的数据结构,它可以作为其它数据结构的基础。如数组、记录、线性表、队列和集合等,在Lua中都可以通过table来表示。 1. 数组: 使用整数来索引table即可在Lua中实现数组。因此,Lua中的数组没有固定的大小,如: 1 a = {} 2 for i = 1, 1000 do 3 a[i] = 0 4 end转载 2014-12-04 00:25:41 · 415 阅读 · 0 评论 -
8.lua学习笔记:协程
1.协程基础: lua把所有协程相关的函数都放在coroutine的table中,create接受一个函数参数用于创建协程,这个参数就是协程的执行过程, 每个协程有四种状态:suspended(挂起),running(运行),dead(死亡,执行完),normal(正常) co = coroutine.create( function () print("hello") en原创 2014-12-03 22:49:46 · 502 阅读 · 0 评论 -
7.lua学习笔记:编译、执行与错误
1. 编译: Lua中提供了dofile函数,它是一种内置的操作,用于运行Lua代码块。但实际上dofile只是一个辅助函数,loadfile才是真正的核心函数。相比于dofile,loadfile只是从指定的文件中加载Lua代码块,然后编译这段代码块,如果有编译错误,就返回nil,同时给出错误信息,但是在编译成功后并不真正的执行这段代码块。因此,我们可以将dofile实现为: 1转载 2014-12-03 20:56:39 · 468 阅读 · 0 评论 -
5.lua学习笔记:函数
1.多重赋值: 在lua中可以多重赋值,和Python类似: a, b = 1, 2 这样就能在函数中返回多个值了,并且lua的多重赋值更加智能,当值得个数多于变量的个数时,多余的值将被舍弃; 当变量的个数多于值得个数时,多余的变量将被赋值为nil;Python中的多重赋值需要变量和值得个数对应 2.变长参数: lua中可以编写接原创 2014-12-02 23:56:15 · 492 阅读 · 0 评论 -
1.lua学习笔记:环境配置
1.下载lua工程,下载地址为http://www.lua.org/ftp/ 我这里下载的是lua-5.2.3 2.查看doc/readme.html,发现需要编译三部分,lua库、解释器、编译器 3.编写bat脚本 rem "build lua environment..." echo "build lua dynamic library..." cd ./bin cl /O2原创 2014-12-01 16:35:30 · 490 阅读 · 0 评论 -
4.lua学习笔记:控制语句
1. if ... then ... elseif ... then ... else ..... end 例如: local tmp = 0 if tmp > 18 then print("已成年") elseif tmp == 18 then print("即将成年") else原创 2014-12-02 00:17:45 · 498 阅读 · 0 评论 -
3.lua学习笔记:类型与值
lua内置8种类型:nil, boolean, number, string, userdata, function, thread, table nil: nil只与nil相等,所有全局变量的默认值为nil,将nil赋值给变量相当于将变量删除 boolean: boolean 只有两值,true, false;在条件判断中除了fals原创 2014-12-01 23:01:56 · 565 阅读 · 0 评论 -
17.lua学习笔记:io库
I/O库为文件操作提供了两种不同的模型,简单模型和完整模型。简单模型假设一个当前输入文件和一个当前输出文件,他的I/O操作均作用于这些文件。完整模型则使用显式的文件句柄,并将所有的操作定义为文件句柄上的方法。 1. 简单模型: I/O库会将进程标准输入输出作为其缺省的输入文件和输出文件。我们可以通过io.input(filename)和io.output(filename)这两转载 2014-12-07 16:54:50 · 515 阅读 · 0 评论