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语言的函数函数库,实现代码如下:

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

[lua]紫猫lua教程-命令宝典-L1-01-11. lua的个人补充的更多相关文章

  1. [lua]紫猫lua教程-命令宝典-L1-01-03. 数值数据

    lua5.3在线手册地址  https://cloudwu.github.io/lua53doc/contents.html#contents 其实我们直接啃手册就够了 推荐如果有基础的先啃手册再看紫 ...

  2. [lua]紫猫lua教程-命令宝典-L1-01-02. 变量

    L1[变量]01. 变量命名规则 命名规则:数字字母下划线构成 但是不能数字开头 不推荐中文名 很多都是不支持中文 但是在一些其他的编辑器里面 比如触摸精灵 之类的 就可以 注意 :变量命名必须要包含 ...

  3. [lua]紫猫lua教程-命令宝典-L1-01-01. Lua环境与IDE

    网上大把的lua教程  不过紫猫老师的教程向来都是讲的非常仔细 所以最近天气已经36+了 魔兽世界还需要冲飞行声望  懒得写单子根本没有单子,正好认认真真的看下紫猫老师的lua教程 紫猫老师的lua教 ...

  4. [lua]紫猫lua教程-命令宝典-L1-01-04. 字符串数据

    L1[字符串]01. 单引号与双引号 没什么说得 字符串:以双引号包含 或者单引号包含 或者[[]]包含 L1[字符串]02. 长文本内容 小知识:如果用[[]]包含字符串内容 但是字符串内容里面 包 ...

  5. [lua]紫猫lua教程-命令宝典-L1-01-07. table表

    L1[table]01. table表的定义与赋值 小知识:声明表的例子 xx={}--创建一个空表xx --给这表的元素赋值 test="a" xx[test]="a& ...

  6. [lua]紫猫lua教程-命令宝典-L1-01-12. 临时补充2

    1.lua的环境变量和函数 (1)_G表  (个人习惯遍历下_G 看看当前环境支持什么库 很多库不是默认就支持的 需要按照流程导入或者加载) 一个全局变量(非函数),内部储存有当前所有的全局函数和全局 ...

  7. [lua]紫猫lua教程-命令宝典-L1-01-10. 自定义函数

    L1[function]01. 定义与调用函数 函数的定义 和概念 没什么可说的 lua的函数声明和调用是有先后顺序的  先声明后调用 函数就是变量的一种 所以可以自由的把函数在变量间相互赋值 不过注 ...

  8. [lua]紫猫lua教程-命令宝典-L1-01-09. string字符串函数库

    L1[string]01. ASCII码互转 小知识:字符串处理的几个共同的几点 1.字符串处理函数 字符串索引可以为负数 表示从字符串末尾开始算起 所有字符串处理函数的 字符串索引参数都使用 2.所 ...

  9. [lua]紫猫lua教程-命令宝典-L1-01-08. math数学函数库

    L1[math]01. 取绝对值 L1[math]02. 三角函数 小知识:注意 lua下三角函数用的参数是弧度 而不是角度 弧度=角度*pi/180  -->弧度角度换算公式  lua的mat ...

随机推荐

  1. 剑指offer-面试题21-调整数组顺序使奇数位于偶数前面-双指针

    /* 题目: 调整数组顺序使奇数位于偶数前面. */ /* 思路: 双指针: 一个指针last用于遍历,当为奇数时+1, 当为偶数时,交换last和pre指向的值,向前移动pre指针. */ #inc ...

  2. .net mvc接收对象数组 通过ajax提交

    ajax代码 var obj = {}; obj.RoomName = ""; obj.RoomCode = ""; $.ajax({ type: " ...

  3. openlayers轨迹匀速播放

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  4. 台大郭彦甫MATLAB教学-个人笔记(一)

    命令和一些特殊的变量 who:查看有哪些变量1. whos:可以查看变量的大小.字节和类型等资料. clear:如果单独使用则是清空所有命令,若后面跟着一个变量名称则为删除此变量. clc:清空命令行 ...

  5. [POI2005] SKA-Piggy Banks - DFS

    有N个小猪存钱罐.每一个存钱罐能够用相应的钥匙打开或者被砸开.Byteazar已经将钥匙放入到一些存钱罐中.现在已知每个钥匙所在的存钱罐,Byteazar想要买一辆小汽车,而且需要打开所有的存钱罐.然 ...

  6. 题解 AT4556 【12/22】

    题目传送门. ___________ 主要思路 我们可以使用\(C++\)语言中的\(string\)字符串来解. 先定义一个字符串\(s\),并输入\(s\). string s; cin>& ...

  7. Hackme.inndy -> Onepunch

    Onepunch 这个题的想法必须得称妙了,需要对以往简单的认知进行一定的颠覆.特殊性在于程序的代码段(0x401000)具有写权限 1.通过修改程序代码段控制程序流程 程序中只能对任意一个字节改写一 ...

  8. How to Install Oracle Java 11 on Ubuntu 18.04 LTS (Bionic) Written by Rahul, Updated on April 3, 20

    本文系转载备份 请阅读点击下面链接阅读原文以获取更佳地阅读体验.谢谢. How to Install Oracle Java 11 on Ubuntu 18.04 LTS (Bionic) Writt ...

  9. goland设置go module

    goland版本2019.3.2 go版本1.14 网上一大堆乱七八糟的什么破文章,讲了半天都没讲清这个go module怎么实际运用,真滴烦躁,一giao我哩giaogiao!!!!! 这边我直接介 ...

  10. jacob导入项目

    在 resource 下创建一个 lib 将网上下载的 jacob.jar 放入其中 在 pom 文件中导入相对应的 jar 包 <dependency> <groupId>c ...