博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[lua]紫猫lua教程-命令宝典-L1-01-11. lua的个人补充
阅读量:5094 次
发布时间:2019-06-13

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

1.关于三目运算符的一些补充和纠正

前面没看仔细  a>b ? a: b 这个形式 似乎lua下并不存在。。。要了命

一般都是使用  a and b or c 的形式 但是这种形式存在一些问题

    详细说了lua下的三目运算符的最终形式和为什么要这么写

完整三目运算符(a and {b} or {c})[1]

123

2 关于lua的两种调用类方法的区别

a==>类名

a:test()  a.test()==》类名a下的类方法test() 

function a:test()

     print(self.name .. "test")
end

如果在类方法中的test()如果使用了当前类 比如self  那么在外面调用 这个类方法的时候

a:test()

a.test(a)--这种形式需要传递进当前的类名 不然会出错

3 Lua的面向对象编程相关

4 lua的文件操作处理和读写操作

lua的IO库常用函数的介绍(文件读写操作) 

--读取指定路径文件全部内容 成功返回内容 读取失败返回nilfunction readfile(path)  local file = io.open(path, "r")--找不到并不会自动创建  if file then    local content = file:read("*a")    io.close(file)    return content  end  return nilend--把表元素的作为文件的一行覆盖写入到文件里面function writetabletofile(path,temptable)    temptable=((type(temptable)=="table") and {temptable} or {
{}})[1] --万一是没写入i第二个参数或者第二个参数不是表就给个空表 local tempstr="" local file --1.构建要写入的 而且为了避免表元素类型的差异 强制转化为字符串以防万一 for v,k in pairs(temptable) do tempstr=tempstr .. tostring(k) .. "\n" end --2.写入指定文件 if tostring(tempstr)~="" then file = io.open(path, "w")--w模式下如果文件不存在会自动创建 if file then file:write(tempstr) io.close(file) return else return nil end else return nil endend--读取指定路径文件全部内容到表中 成功返回表 读取失败返回nil 不过要注意 返回值表只是传址function readfiletotable(path) --temptable=((type(temptable)=="table") and {temptable} or {
{}})[1] --万一是没写入i第二个参数或者第二个参数不是表就给个空表 local temptable={} local i=1 print(path) local file = io.open(path, "r")--找不到并不会自动创建 if file then for line in file:lines() do --使用file:lines()函数逐行读取文件 temptable[i]=line i=i+1 end io.close(file) return temptable else return nil end end--覆盖写入文件内容 失败的话返回nilfunction writefile(path,str) str=tostring(str) or ""--为了避免函数参数不是字符串或为nil 报错 给一个初值 local file = io.open(path, "w")--w模式下如果文件不存在会自动创建 if file then file:write(str) io.close(file) return else return nil end end--追加写入文件内容function appendfile(path,str) str=tostring(str) or ""--为了避免函数参数不是字符串或为nil 报错 给一个初值 local file = io.open(path, "a")--a模式下如果文件不存在会自动创建 if file then file:write(str) io.close(file) return else return nil endend
 
--判断文件是否存在 返回truefalsefunction zjllib:fileExist(path)  local file = io.open(path, "r")  if file then    io.close(file)    return true  end  return falseend

lua文件操作的lfs库(文件的创建删除复制剪切改名等等操作)       

    lfs.attributes(filepath [, aname]) 获取路径指定属性

    lfs.chdir(path) 改变当前工作目录,成功返回true,失败返回nil加上错误信息
    lfs.currentdir 获取当前工作目录,成功返回路径,失败为nil加上错误信息
    lfs.dir(path) 返回一个迭代器(function)和一个目录(userdata),每次迭代器都会返回一个路径,直到不是文件目录为止,则迭代器返回nil
    lfs.lock(filehandle, mode[, start[, length]])
    lfs.mkdir(dirname)  创建一个新目录
    lfs.rmdir(dirname) 删除一个已存在的目录,成功返回true,失败返回nil加上错误信息 但是不会导致代码崩溃 只是返回2个值 一个是是否成功 另外一个是错误的内容

                             

5 lua的异常处理

其实就是为了避免代码报错导致的整个代码崩溃的情况 就3个函数来处理这些错误避免代码崩溃

assert()

pcall()

xpcall()

基本上在可能报错的函数 用pcall或者xpcall包含住  一旦里面出错 pcall 或者xpcall 只是返回2个值 第一个是是否成功运行true false 第二个是包含的函数的返回值或者错误信息的具体内容

auto-orient

auto-orient

255

438

6lua的debug库

  Lua内置的调试器用法详解

   Lua调试:getinfo详解

7 os.time()的问题

  os.time()的问题和解决办法

1.os.clock函数的实现是调用了c语言的函数函数库,实现代码如下:

static int os_clock (lua_State *L) {  lua_pushnumber(L, ((lua_Number)clock())/(lua_Number)CLOCKS_PER_SEC);  return 1;  }

其中有个CLOCKS_PER_SEC值,在不同平台有着不同的定义,所以一定要注意函数的溢出问题,程序运行时间太长的话,使用clock有可能会返回负数

ANSI clock有三个问题:

1)如果超过一个小时,将要导致溢出.
2)函数clock没有考虑CPU被子进程使用的情况.
3)也不能区分用户空间和内核空间
.

果然是老语言 很多东西都不够完善

所以clock函数在linux系统上变得没有意义.

2.使用socket.gettime()函数代替os.clock()

--require "socket" –不太清楚这个方法调用有点问题 只能换个方式socket = require("socket")for i=1,10 do    print(socket.gettime())--简单说下这个函数 返回的是以秒为单位的时间戳 但是,默认它有4位小数位,    --就是说可以轻松转化为13位的毫秒时间戳 但是注意这个返回值X1000后整体是14位 获取我们需要的13位时间戳    --floor(socket.gettime()*1000) 这样就可以了    print(math.floor(socket.gettime()*1000))--注意获取得是当前系统得时间戳 而不是网络时间戳测试过了    end

8 lua下导入其他文件的2个常见办法

导入模块 require  注意模块的写法有一定要求 就是lua面向对象编程

导入其他lua的代码 dofile 注意dofile “test.lua”  相当于再dofile得位置 执行了一遍test.lua得所有代码

这个办法h很好用  一些常用得自定义函数 或者代码常见的声明区 或者最常见的一些代码初始化区域 都可以单独的放到一个独立lua文件 在别的lua源码中开头直接dofile 当前代码就不用重复的代码初始化之类的重复操作 相当于按键下的import

123

转载于:https://www.cnblogs.com/zjl8455482/p/11261015.html

你可能感兴趣的文章
TestNG入门
查看>>
【ul开发攻略】HTML5/CSS3菜单代码 阴影+发光+圆角
查看>>
IOS-图片操作集合
查看>>
IO—》Properties类&序列化流与反序列化流
查看>>
jquery实现限制textarea输入字数
查看>>
Codeforces 719B Anatoly and Cockroaches
查看>>
ActiveMQ与spring整合
查看>>
第一阶段冲刺06
查看>>
EOS生产区块:解析插件producer_plugin
查看>>
排球积分程序(三)——模型类的设计
查看>>
HDU 4635 Strongly connected
查看>>
格式化输出数字和时间
查看>>
页面中公用的全选按钮,单选按钮组件的编写
查看>>
java笔记--用ThreadLocal管理线程,Callable<V>接口实现有返回值的线程
查看>>
(旧笔记搬家)struts.xml中单独页面跳转的配置
查看>>
不定期周末福利:数据结构与算法学习书单
查看>>
strlen函数
查看>>
关于TFS2010使用常见问题
查看>>
URL编码与解码
查看>>
Eclipse 安装SVN插件
查看>>