lua 随笔-乱(摘抄)

来源:互联网 发布:mac上什么软件处理图片 编辑:程序博客网 时间:2024/05/16 12:46
-- 行注释
--[[ --]] 块注释

'\a' 响铃
'\b' 退格
'\f' 表单,换页
'\n' 换行
'\r' 回库,回车
'\t' 横向制表
'\v' 纵向制表
'\\' 反斜杠
'\"' 双引号
'\'' 单引号

~=不等于
.. 字符拼接
#arr arr的长度


__add(a,b) a+b
__sub(a,b) a-b
__mul(a,b) a*b
__div(a,b) a/b
__mod(a,b) a%b
__pow(a,b) a^b
__unm(a) -a
__concat(a,b) a..b
__len(a) #a
__eq(a,b) a==b
__lt(a,b) a<b
__le(a,b) a<=b
__index(a,b) a.b
__newindex(a,b,c) a.b=c
__call(a,...) a(...)

布尔类型只有nil(零)和false是 false,数字0啊,‘'空字符串('\0′)都是true!

lua无括号,用do、end来替代括号的作用,
lua不使用++、+=这些算法操作

if-else:
if 条件 then
else
end

until循环
repeat
代码
until 条件

函数前需加function,最后用end结束

lua默认定义全局变量,局部变量需加local

可以在一条语句上赋多个值,也可以同时返回多个值(return)

数组可容纳不同类型的数据,可直接通过下标访问数据

lua索引默认值(类似数组下标)不是从0开始,而是从1开始

require("name") 一个同样的lua文件,只有第一次的时候会执行,后面相同的不执行,忽略
dofile("name")每次都执行,即使是同样的一个lua文件
loadfile() 载入暂不执行,等需要时操作执行。示例:
localhello= loadfile("hello")
...
...
hello()

读写用io.write和io.read,即io.write相当于cout,io.read相当于cin。

-e 直接将命令传入lua
-l 加载一个文件
-i 进入交互模式
_PROMPT 内置变量,作为交互模式的提示符。用法:“_PROMPT ‘提示符’”

?? arg表:script之前为-1开始减,之后从1开始增,本身为0

lua的8个基本类型nil、boolean、number、string、userdata、function、thread和table

.. 字符拼接,后面必须使用空格隔开,防止解释错

and和or的运算结果不是true和false,而是类似三目运算符,即第一个false,返回a(and)/b(or)

x=x or v 如果x为false或者nil则给x赋初始值v

(a and b) or c 对应C语言的三目运算符(a?b:c)

not的结果只返回false或者true

优先度:^> not >=-(负号)> * >= /> + >=- >.. > 逻辑判断符 > and> or

除了^ 和..外所有的二元运算符都是左连接的,即当优先级相同时,从左往右的顺序执行

赋值时lua会先计算所有的值再执行赋值操作,所以x,y=y,x执行了x,y的相互交换

哑元(dummy variable,下划线)忽略该位置的数据

函数参数列表中使用三点(…)表示函数有可变参数
lua将函数的参数放在一个叫arg的表中,除了参数以外,arg表中还有一个域 n表示参数的个数

string.find(string1,string2) 再 string1查找 string2位置(返回最后一个字符的位置)

unpack(arg) 返回arg表所有的可变参数
文本格式化函数string.format(类似C语言的sprintf函数),转义字符
常用的格式控制符string.format(“%d”,value)
可以在%号后添加参数. 参数将以如下的顺序读入:
(1) 符号: 一个+号表示其后的数字转义符将让正数显示正号. 负数不变.
(2) 占位符: 一个0, 在后面指定了字串宽度时占位用. 默认占位符是空格.
(3) 对齐标识: 在指定了字串宽度时, 默认为右对齐, 增加-号可以改为左对齐.(用于一些自动空格地方)
(4) 宽度数值 .小数位数/字串裁切: 在宽度数值后增加的小数部分n, 若后接f则设定该浮点数的小数只保留n位, 若后接s则设定该字符串只显示前n位.


正确尾调用(proper tail recursion,尾递归):当函数最后一个动作是调用另外一个函数时,称为尾调用。尾调用不需要使用额外的栈(不需要保存调用者的任何信息)。(迷宫问题)

迭代器需要保留上一次成功调用的状态和下一次成功调用的状态,也就是他知道来自于哪里和将要前往哪里。

<var-list>是以一个或多个逗号分隔的变量名列表,<exp-list>是以一个或多个逗号分隔的表达式列表,通常情况下exp-list只有一个值:迭代工厂的调用。

loadstring与loadfile相似,只不过它不是从文件里读入chunk,而是从一个串中读入。
loadstring函数功能强大,但使用时需多加小心。确认没有其它简单的解决问题的方法再使用。
loadfile和loadstring都不会抛出错误,如果发生错误他们将返回nil加上错误信息:

Lua中的函数定义是发生在运行时的赋值而不是发生在编译时。


调用loadstring返回的结果,然而如果加载的内容存在语法错误的话,loadstring返回nil和错误信息(attempt to call a nil value);为了返回更清楚的错误信息可以使用assert:
assert(loadstring(s))()loadstring编译的时候不关心词法范围



require使用的路径和普通我们看到的路径还有些区别,我们一般见到的路径都是一个目录列表。require的路径是一个模式列表,每一个模式指明一种由虚文件名(require的参数)转成实文件名的方法。更明确地说,每一个模式是一个包含可选的问号的文件名。匹配的时候Lua会首先将问号用虚文件名替换,然后看是否有这样的文件存在。如果不存在继续用同样的方法用第二个模式匹配。

为了确定路径,Lua首先检查全局变量LUA_PATH是否为一个字符串,如果是则认为这个串就是路径;否则require检查环境变量LUA_PATH的值,如果两个都失败require使用固定的路径(典型的"?;?.lua")

require的另一个功能是避免重复加载同一个文件两次。Lua保留一张所有已经加载的文件的列表(使用table保存)。

当io.open打开失败时,
用assert将错误抛出。io.open返回的第二个结果(错误信息)会作为assert的第二个参数


0 0
原创粉丝点击