博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Lua 学习记录
阅读量:7042 次
发布时间:2019-06-28

本文共 2291 字,大约阅读时间需要 7 分钟。

hot3.png

Lua 可以对多个变量同时赋值,变量列表和值列表的各个元素用逗号分开

赋值语句右边的值会依次赋给左边的变量 

a,b = 1,2

赋值语句会先计算右边所有的值然后再执行赋值操作 

x = 1;y = 2x, y = y, x

变量个数>值的个数 按变量个数补足 nil  变量个数<值的个数 多余的值会被忽略 

a, b, c = 0  //0 nil nil 不是想象中的 0 0 0

使用 local 创建一个局部变量,局部变量只在被声明的那个代码块内有效。 

代码块:指一个控制结构,一个函数体,或者一个chunk (do..end 内的部分)

应该尽可能的使用局部变量:

1. 避免命名冲突

2. 访问局部变量的速度比全局变量更快.

控制结构的条件表达式结果可以是任何值,Lua 认为 false nil 为假,其他值为真。

函数语法:

function func_name (arguments-list)     statements-list; end;

调用函数的时候,如果参数列表为空,必须使用()表明是函数调用。 

当函数只有一个参数并且这个参数是字符串或者表构造的时 候,()是可选的 

print "message"type  "message"

Lua 函数可以返回多个值   如下例返回字符串匹配开始与结束下标

startPoint, endPoint =  string.find("hello Lua users", "Lua")

Lua 会首先把代码预编译成中间码然后再执行 

解释型语言的特征不在于他们是否被编译,而是编译器是语言运行时的一部分 

函数 dofile 的存在就是说明可以将 Lua作为一种解释型语言被调用。 

dofile实际上是一个辅助的函数。真正完成功能的函数是 loadfile 

loadfile编译代码成中间码并且返回编译后的 chunk 作为一个函数,而不执行代码 

loadstring loadfile 相似,只不过它不是从文件里读入 chunk,而是从一个串中读入。 

函数:

Lua 中的函数是带有词法定界(lexical scoping)的第一类值(first-class values)。

第一类值指:在 Lua 中函数和其他值一样可以被存放在变量中,也可以存放在表中,可以作为函数的参数,还可以作为函数的返回值。

词法定界指:嵌套的函数可以访问他外部函数中的变量。

function func_name (arguments-list)    statements-list;end;

调用函数的时候,如果参数列表为空,必须使用()表明是函数调用。

当函数只有一个参数并且这个参数是字符串或者表构造的时 候,()可有可无。

Lua 函数实参和形参的匹配与赋值语句类似,多余部分被忽略,缺少部分用 nil 补足。

Lua 函数可以接受可变数目的参数,和C语言类似在函数参数列表中使用三点(...)表示函数有可变的参数。Lua 将函数参数放在一个叫 arg 的表中,除了参数以外,arg 表中还有一个域 n 表示参数的个数。

命名参数:

Lua 的函数参数是和位置相关的,调用时实参会按顺序依次传给形参。

Lua 可以通过将所有的参数放在一个表中,把表作为函数的唯一参数来实现上面这段伪代码的功能。

Lua 中关于函数稍微难以理解的是函数也可以没有名字。

我们所说的函数 就是指向函数的变量

迭代器是一种支持指针类型的结构,它可以遍历集合的每一个元素。

Lua 会首先把代码预编译成中间码然后再执行

table 是 Lua 中唯一的数据结构,其他语言所提供的数据结构

如:arrays、records、 lists、queues、sets 等,Lua 都是通过 table 来实现。

lua 中通过整数下标访问 table 中元素,即是数组。并且数组大小不固定,可动态增长。

习惯上,Lua 的下标从 1 开始。(主要是为了使用标准库中的函数)

array = {}for i = 1 , 1000 do array[i] = i endprint(array[128])  --128

可以用构造器在创建数组的同时初始化数组:

array = {9,8,7,6,5,4,3,2,1,0}

Lua 中有两种表示矩阵的方法,一是“数组的数组”。table 的每个元素是另一个 table。

matrix = {}for i = 1,9 do    matrix[i] = {}    for j = 1,9 do        matrix[i][j] = i*j     end end

result = coroutine.create(function() print "Hello Dariion" end)print(result)print(coroutine.status(result))print(coroutine.resume(result))

I/O 库为文件操作提供两种模式。

简单模式拥有一个当前输入文件和一个当前输出文件,并且提供针对这些文件相关的操作。

完全模式使用外部的文件句柄来实现。

它以一种面对对象的形式,将所有的文件操作定义为文件句柄的方法。

简单模式的所有操作都是在两个当前文件之上。

I/O 库将当前输入文件作为标准输 入(stdin),将当前输出文件作为标准输出(stdout)。

转载于:https://my.oschina.net/darionyaphet/blog/381008

你可能感兴趣的文章
我的友情链接
查看>>
Angular2 AoT编译以及Rollup摇树优化
查看>>
ReactJS 学习资料汇总
查看>>
IIS权限应该怎么给?
查看>>
SpringMVC 拦截器和过滤器的区别&&Struts2拦截器和过滤器的区别
查看>>
Linux安装mysql
查看>>
linux 使用全攻略
查看>>
Access:collating sort order SortOrder[2052(0)]
查看>>
Spark算子:RDD基本转换操作(1)–map、flagMap、distinct
查看>>
我的友情链接
查看>>
shell学习(二)变量
查看>>
Delphi随机数
查看>>
[置顶] webservice系列3---chain
查看>>
CSS练习小结
查看>>
hibernate XML配置文件》cfg
查看>>
ExtJS2.0实用简明教程 - ExtJS的组件
查看>>
员工离职原因,只有两点最真实,其他都是扯淡!
查看>>
删除dataGridview中选中的一行或多行
查看>>
使用包ldap3进行Python的LDAP操作
查看>>
#4 Move Find into Model
查看>>