chapter 1:Intro
交互模式中可以用dofile(“xxx.lua”)在中途加载函数
comment
1 | -- short comment |
优秀的函数注释
1 | --[[ |
Basic type nil, Boolean, number, string, userdata, function, thread, and table
chapter 3:Numbers
5.3版本lua加入整数表示
lua不区分浮点数和整数的数值,普通除法/
,整数除法//
。但可以用math.type(x)
区别数字的类型。
用0x来表示十六进制,在16进制中,p代表2,可以在数字后缀加p2,p3,p-1来表示乘上2的几次方
1 | 0x1p-1==0.5 |
不等于~=
数学库使用:
huge
最大数字,deg``rad
角度制幅度制转换
math.random
和math.randomseed(os.time())
Rounding functions:floor
(向-inf取整), ceil
(向inf取整), and modf
(向0取整) (大整数情况下floor
会失效)
转成浮点数x+0.0
,转成整数需要调用Rounding fuctions
Chapter 4. Strings
实用技巧如何把循环变量拼入类属性,self["m_slot"..tostring(i)]
String
在lua中是不可变的量,所以不支持在String
上面修改单个字符。
String
,Table
,Fuction
会自动管理内存,不需要手动释放
#+String
自动返回该String
的长度
tonumber
和tostring
String库使用:
string初始需要默认为1,可以使用-1标识最后一个字符utf8
有个自己的库
1 | string.len(s) |
1 | > string.format("x = %d y = %d", 10, 20) --> x = 10 y = 20 |
Chapter 5. Tables
Table
的名字是其背后表的一个引用,There is no fixed relationship between a variable that holds a table and the table itself。 Lua中对于=
符号,拷贝对象是Table
的时候表示浅拷贝,拷贝对象的类型是string
、number
、boolean
这些基本类型的时候会使用深拷贝。
可以通过给某个key
的table值赋值nil从而删掉这个mapping
在key
中认为2和2.0是一个东西
record-style
和list-style initializations
1 | polyline = {color="blue", |
1 | a={} |
安全查询zip = company?.director?.address?.zipcode
#
在Table中统计数量,通常是放回数组中从1开始到n都是有数值的个数,不代表Table中有多少个键值对。目前除了遍历之外,没见到太好的有统计Table内参数个数的情况
Table库的使用
1 | table.insert(t,1,15) |
a or b
——如果a 为true,则返回a,否则返回b (当n等于nil
或者false
的时候n被初始化a.)
a and b
——如果a 为false,则返回a,否则返回b
Chapter 6. Functions
函数可以返回多个结果,但是如果该结果要赋值给单个变量/参与表达式运算的时候,通常只保留第一个数字进行运算。
函数可以有任意个输入用...
代替即可
1 | function add (...) |
table.pack
:把所有输入的参数打包成一个新的Table,这样就可以保证输入的参数形成一个可以遍历的数据结构。pack后的返回值,有一个多余的参数n表示Table的大小。
select
函数,选择从序号x开始之后的所有参数,# 返回参数个数
1 | print(select(2, "a", "b", "c")) --> b c |
table.unpack
: It takes a list and returns as results all elements from the list
Chapter 7. 库函数
IO库
io.read()
和io.write()
read()填入参数 | 效果 |
---|---|
“a” | reads the whole file |
“l” | reads the next line (dropping the newline) |
“L” | reads the next line (keeping the newline) |
“n” | reads a number |
num | reads num characters as a string |
io.open
OS库
The function os.execute runs a system command;
Chapter 8. Filling some Gaps
Local Variables and Blocks
局部变量的有效局限在block
内,可以使用do
和end
有效的指定block
内。
1 | local x1, x2 |
循环/选择结构
In particular, Lua treats both zero and the empty string as true.
elseif
通过例子看下基本控制结构
1 | local i = 1 |
repeat–until
等价于c语言的do-while
结构
1 | -- print the first non-empty input line |
for
循环
1 | -- 从[exp1,exp2],以exp3的步长来遍历 |
Chapter 17. Modules and Packages
Modules类似于一个封装库,可以用lua自己写Modules,然后用require
函数导入该Module
Chapter 21. Object-Oriented Programming
面向对象标准写法
1 | --定义 |