[lua]紫猫lua教程-命令宝典-L1-01-11. lua的个人补充
1.关于三目运算符的一些补充和纠正
前面没看仔细 a>b ? a: b 这个形式 似乎lua下并不存在。。。要了命
一般都是使用 a and b or c 的形式 但是这种形式存在一些问题
https://blog.csdn.net/albertsh/article/details/76248913 详细说了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的面向对象编程相关
http://wiki.jikexueyuan.com/project/lua/object-oriented.html
4 lua的文件操作处理和读写操作
lua的IO库常用函数的介绍(文件读写操作) https://blog.csdn.net/xufeng0991/article/details/38453499
--读取指定路径文件全部内容 成功返回内容 读取失败返回nil
function readfile(path)
local file = io.open(path, "r")--找不到并不会自动创建
if file then
local content = file:read("*a")
io.close(file)
return content
end
return nil
end
--把表元素的作为文件的一行覆盖写入到文件里面
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
end end --读取指定路径文件全部内容到表中 成功返回表 读取失败返回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
--覆盖写入文件内容 失败的话返回nil
function 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
end
end
--判断文件是否存在 返回truefalse
function zjllib:fileExist(path)
local file = io.open(path, "r")
if file then
io.close(file)
return true
end
return false
end
lua文件操作的lfs库(文件的创建删除复制剪切改名等等操作) https://blog.csdn.net/v_xchen_v/article/details/78321911
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 第二个是包含的函数的返回值或者错误信息的具体内容




6lua的debug库
https://www.jb51.net/article/66960.htm Lua内置的调试器用法详解
https://blog.csdn.net/mr_oldcold/article/details/85220153 Lua调试:getinfo详解
7 os.time()的问题
https://www.cnblogs.com/chevin/p/7011224.html os.time()的问题和解决办法 1.os.clock函数的实现是调用了c语言的函数函数库,实现代码如下:
其中有个 ANSI clock有三个问题: 所以clock函数在linux系统上变得没有意义.
2.使用socket.gettime()函数代替os.clock()
static int os_clock (lua_State *L) {
lua_pushnumber(L, ((lua_Number)clock())/(lua_Number)CLOCKS_PER_SEC);
return 1;
}CLOCKS_PER_SEC值,在不同平台有着不同的定义,所以一定要注意函数的溢出问题,程序运行时间太长的话,使用clock有可能会返回负数。
1)如果超过一个小时,将要导致溢出.
2)函数clock没有考虑CPU被子进程使用的情况.
3)也不能区分用户空间和内核空间.
果然是老语言 很多东西都不够完善
--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
[lua]紫猫lua教程-命令宝典-L1-01-11. lua的个人补充的更多相关文章
- [lua]紫猫lua教程-命令宝典-L1-01-03. 数值数据
lua5.3在线手册地址 https://cloudwu.github.io/lua53doc/contents.html#contents 其实我们直接啃手册就够了 推荐如果有基础的先啃手册再看紫 ...
- [lua]紫猫lua教程-命令宝典-L1-01-02. 变量
L1[变量]01. 变量命名规则 命名规则:数字字母下划线构成 但是不能数字开头 不推荐中文名 很多都是不支持中文 但是在一些其他的编辑器里面 比如触摸精灵 之类的 就可以 注意 :变量命名必须要包含 ...
- [lua]紫猫lua教程-命令宝典-L1-01-01. Lua环境与IDE
网上大把的lua教程 不过紫猫老师的教程向来都是讲的非常仔细 所以最近天气已经36+了 魔兽世界还需要冲飞行声望 懒得写单子根本没有单子,正好认认真真的看下紫猫老师的lua教程 紫猫老师的lua教 ...
- [lua]紫猫lua教程-命令宝典-L1-01-04. 字符串数据
L1[字符串]01. 单引号与双引号 没什么说得 字符串:以双引号包含 或者单引号包含 或者[[]]包含 L1[字符串]02. 长文本内容 小知识:如果用[[]]包含字符串内容 但是字符串内容里面 包 ...
- [lua]紫猫lua教程-命令宝典-L1-01-07. table表
L1[table]01. table表的定义与赋值 小知识:声明表的例子 xx={}--创建一个空表xx --给这表的元素赋值 test="a" xx[test]="a& ...
- [lua]紫猫lua教程-命令宝典-L1-01-12. 临时补充2
1.lua的环境变量和函数 (1)_G表 (个人习惯遍历下_G 看看当前环境支持什么库 很多库不是默认就支持的 需要按照流程导入或者加载) 一个全局变量(非函数),内部储存有当前所有的全局函数和全局 ...
- [lua]紫猫lua教程-命令宝典-L1-01-10. 自定义函数
L1[function]01. 定义与调用函数 函数的定义 和概念 没什么可说的 lua的函数声明和调用是有先后顺序的 先声明后调用 函数就是变量的一种 所以可以自由的把函数在变量间相互赋值 不过注 ...
- [lua]紫猫lua教程-命令宝典-L1-01-09. string字符串函数库
L1[string]01. ASCII码互转 小知识:字符串处理的几个共同的几点 1.字符串处理函数 字符串索引可以为负数 表示从字符串末尾开始算起 所有字符串处理函数的 字符串索引参数都使用 2.所 ...
- [lua]紫猫lua教程-命令宝典-L1-01-08. math数学函数库
L1[math]01. 取绝对值 L1[math]02. 三角函数 小知识:注意 lua下三角函数用的参数是弧度 而不是角度 弧度=角度*pi/180 -->弧度角度换算公式 lua的mat ...
随机推荐
- centos7 下 安装GeoIP2,在nginx中根据ip地址对应的国家转发请求
最近有个需求是根据用户的地理位置,访问不同的服务器,比如国外用户访问国外的服务器,国内的用户访问国内的服务器,实现的思路主要两种: 智能dns,这个需要在阿里云中注册为企业版才有提供 nginx中使用 ...
- python multiprocessing 耗内存问题
multiprocessing在每创建一个进程时,会将主进程的内存空间原封不动的复制一份到子进程,这样一来内存消耗很容易就翻几倍,导致程序无法运行. 究其原因,是启动进程时采用了os.fork(),使 ...
- 题解 AT3718 【[ABC081B] Shift only】
题目传送门 分析 直接暴力. 我们可以根据题意进行模拟,使用二重循环即可. 代码讲解 定义变量\(n\)和计数数组\(cnt\),再定义数组\(a\)并输入. int a[1000000]; int ...
- 最短路-B - 六度分离
B - 六度分离 1967年,美国著名的社会学家斯坦利·米尔格兰姆提出了一个名为“小世界现象(small world phenomenon)”的著名假说,大意是说,任何2个素不相识的人中间最多只隔着6 ...
- jQuery---第一部分复习
jquery: 简单.粗暴 jq和js的关系 js是什么? js是一门编程语言 jq仅仅是基于js的一个库,jq可理解为就是开发js的一个工具. 概念 1. 为什么 ...
- P1402 酒店之王【网络流】【最大流】
P1402 酒店之王 提交 5.39k 通过 2.16k 时间限制 1.00s 内存限制 125.00MB 题目提供者yeszy 难度省选/NOI- 历史分数100 提交记录 查看题解 标签 福建省历 ...
- 在macOS 上添加 JAVA_HOME 环境变量
If you are planing to develop Java Apps on your Mac, you may have to set $JAVA_HOME environment vari ...
- python3练习100题——033
链接:http://www.runoob.com/python/python-exercise-example33.html 题目:按逗号分隔列表. l=[1,2,3,4] k=1 for i in ...
- navicat连接mysql查询结果中文都是?号(C#)
记录解决方法,方便以后查看. 有几个地方需要注意: 1.连接mysql数据库的字符串最后加上Charset=utf8; 2.mysql中character_set_XX设置都为utf8,使用show ...
- 使用TensorFlow训练模型的基本流程
本文已在公众号机器视觉与算法建模发布,转载请联系我. 使用TensorFlow的基本流程 本篇文章将介绍使用tensorflow的训练模型的基本流程,包括制作读取TFRecord,训练和保存模型,读取 ...