标签:number print ipa and 混合 hand return 存在 director
【数学库】
数学库(math)由一组标准的数学函数构成。这里主要介绍几个常用的函数,其它的大家可以自行百度解决。
print(math.sin(math.rad(30))) -- 0.5
谨记:三角函数的参数都是弧度,在实际使用中不要忘了,是弧度。
print(math.floor(5.6)) -- 5 print(math.ceil(5.6)) -- 6
print(math.max(2, 3, 2, 14, 2, 30, -3)) -- 30 print(math.min(2, 3, 2, 14, 2, 30, -3)) -- -3
print(math.random()) -- 输出一个大于等于0,小于1的值 print(math.random(2)) -- 输出不是1就是2 print(math.random(3, 4)) -- 输出不是3就是4
如果你按照上面的代码运行,然后再看着我写的注释,你可能就要骂我了,什么破注释了,明显就是错的么?每次运行的输出结果都是一样的。是的,结果是一样的,这就要说到即将出场的math.randomseed。函数math.randomseed用于设置伪随机数生成器的种子数。(看到这里,我姑且认为你是已经有过一年编程经验的人员了,所以,你就不要问我什么是种子了,这种概念性的东西,我想百度百科或者维基百科比我更有指导意义)math.randomseed的唯一参数就是一个我们称为种子数的值。一般我们的做法是在一个程序启动时,用一个固定的种子数来调用它,以此初始化伪随机数生成器。那么如何设置这个math.randomseed的种子值呢?如果使用同一个种子值的话,每次得到的随机数就会是一样的,在实际开发中,一般都是使用当前时间作为种子值,比如:
math.randomseed(os.time())
math.randomseed(os.time()) print(math.random()) -- 输出一个大于等于0,小于1的值 print(math.random(2)) -- 输出不是1就是2 print(math.random(3, 4)) -- 输出不是3就是4
【table库】
table库是由一些辅助函数构成的,这些函数将table作为数组来操作(重点:作为数组来操作的)。
local tb = {10, 20, 30} table.insert(tb, 40) -- 在table的最后插入,结果为:{10, 20, 30, 40} table.insert(tb, 2, 15) -- 在table的位置2插入,结果为:{10, 15, 20, 30, 40}
local tb = {10, 20, 30} print(table.remove(tb)) -- 删除最后一个元素,并返回30;最后,tb = {10, 20} print(table.remove(tb, 1)) -- 删除第一个元素并返回10;最后,tb = {20}
local tb = {20, 10, 2, 3, 4, 89, 20, 33, 2, 3} -- 默认是升序排序 table.sort(tb) for _, v in ipairs(tb) do print(v) end print("=======") -- 修改为降序排序 table.sort(tb, function (a, b) if a > b then return true end end) for _, v in ipairs(tb) do print(v) end
local tb = {x = 20, z = 10, y = 30, m = 2, n = 8} -- 这是一个key无序的table -- 如果想按照key的升序排列,下列代码是不起作用的 table.sort(tb) for k, v in pairs(tb) do print(k .. " = " .. v) end
local tb = {x = 20, z = 10, y = 30, m = 2, n = 8} -- 这是一个key无序的table local keyTb = {} for k, _ in pairs(tb) do keyTb[#keyTb + 1] = k end table.sort(keyTb) for _, v in ipairs(keyTb) do print(v .. " = " .. tb[v]) end
local tb = {"Jelly", "Think", "Is", "Good"} local strTb = table.concat(tb, " ") print(strTb)
【字符串库】
重点来了,学习每种语言,在实际工作时,我们总是在和字符串进行打交道。Lua也不例外,在Lua中真正的字符串操作能力来源于字符串库,字符串库中的所有函数都导出在模块string中。现在就来对string库进行总结。
local str = "Jelly Think" -- string.len可以获得字符串的长度 local len = string.len(str) print(len) -- 11 -- string.rep返回字符串重复n次的结果 str = "ab" local newStr = string.rep(str, 2) -- 重复两次 print(newStr) -- abab -- string.lower将字符串大写变成小写形式,并返回一个改变以后的副本 str = "Jelly Think" newStr = string.lower(str) print(newStr) -- jelly think -- string.upper将字符串小写变成大写形式,并返回一个改变以后的副本 newStr = string.upper(str) print(newStr) -- JELLY THINK
local str = "[Jelly Think]" local newStr = string.sub(str, 2, -2) print(newStr) -- Jelly Think newStr = string.sub(str, 2, 6) print(newStr) -- Jelly
函数string.char和函数string.byte用于转换字符及其内部数值表示;string.char函数接受零个或多个整数,并将每个整数转换成对应的字符,然后返回一个由这些字符连接而成的字符串。string.byte(s, i)返回字符串s中第i个字符的内部数值表示,它的第二个参数是可选的,调用string.byte(s)可返回字符串s中第一个字符的内部数值表示。示例代码:
print(string.char(97)) -- a local i = 98 print(string.char(i, i + 1, i + 2)) -- bcd print(string.byte("abc")) -- 97 print(string.byte("abc", 2)) -- 98 print(string.byte("abc", 2, 3)) -- 98 99 print(string.byte("abc", -1)) -- 99
【I/O库】
I/O库为文件操作提供了两种不同的模型,简单模型和完整模型。简单模型假设有一个当前输入文件和一个当前输出文件,它的I/O操作均作用于这些文件。完整模型则使用显式地文件句柄。它采用了面向对象的风格,并将所有的操作定义为文件句柄上的方法。
io.write接受任意数量的字符串参数,并将它们写入当前输出文件;它也可以接受数字参数,数字参数会根据常规的转换规则转换为字符串。如果希望有更多的控制,可以使用string.format进行控制。函数io.read从当前输入文件中读取字符串,它的参数决定了要读取的数据:
“*all” | 读取整个文件 |
“*line” | 读取下一行 |
“*number” | 读取一个数字 |
<num> | 读取一个不超过<num>个字符的字符串 |
直接看一段示例代码吧:
-- 先建立input.txt和output.txt两个文件 -- 在input.txt文件中写入以下内容: --[[ http://www.jellythink.com 果冻想 | 一个原创文章分享网站 88 --]] io.input("input.txt") -- 从input.txt文件中读取 io.output("output.txt") -- 写入到output.txt文件 -- 向input.txt写入一些测试数据 io.write("JellyThink", "\n") io.write("果冻想", "\n") io.write("http://www.JellyThink.com", "\n") io.write(88)
str = io.read("*all") -- 读取所有 --[[ print(str) http://www.jellythink.com 果冻想 | 一个原创文章分享网站 88 --]] print(str)
-- 用来判断是否已经读到了文件末尾 -- 如果已经到了末尾,就返回nil;否则返回空字符串 local mark = io.read(0) while mark do print(io.read("*line")) mark = io.read(0) if not mark then print("File end.") break end end
open函数会返回表示文件的一个句柄;如果发生错误,就返回nil,一条错误消息和一个错误代码。示例代码:
-- 访问一个不存在的文件 print(io.open("ooxx.txt", r)) --[[ 输出以下内容: nil ooxx.txt: No such file or directory 2 --]]
local hFile = io.open("input.txt", r) if hFile then local strContent = hFile:read("*all") --local strContent = hFile.read(hFile, "*all") 你也可以使用这种方法 print(strContent) end
-- io.input()不传入参数时,获取当前的输入文件句柄 local hCurrent = io.input() -- 打开一个新的文件 io.input("input.txt") -- 在新的文件上进行操作 local strContent = io.read("*all") print(strContent) -- 关闭当前文件 io.input():close() -- 操作完成以后,恢复到以前的状态 io.input(hCurrent)
函数的返回值与whence无关,它总是返回文件的当前位置,即相对于文件起始处的偏移字节数。根据上述的描述,来一小段示例代码:
function GetFileSize(hFile) local currentPos = hFile:seek() -- 获取当前位置 local size = file:seek("end") -- 获取文件大小 file:seek("set", currentPos) return size end
标签:number print ipa and 混合 hand return 存在 director
原文地址:http://www.cnblogs.com/ring1992/p/6001271.html