lua的坑(持续更新,每日更新两篇,9/15),更新到17个
文章目录
- 1.把数值转成16进制的格式
- 2.去掉商里的小数
- 3.string.format()保留三位小数
- 4.向上/下取整,四舍五入
- 5.string字符串拆成表
- 6.敏感词过滤
- 7.同名传参/同名字段相关bug
- 1)2个同名传参, 第1个传参无效
- 2)2个同名字段, 第2个字段无效
- 8.表作为传参: 浅拷贝的相关bug
- 1)表作为参数传递时, 是浅拷贝,原表也会改变
- 2)但是, 改变arg表自身, tab不变
- 9.windwos安装lua
- 10.通配符,正则表达式
- 11.用正则实现trim()
- 12.字符串截取string.sub()的使用方法
- 13.数组增删
- 14.if后面跟一个方法, 这个方法会运行
- 15、// 运算, 取商
- 16、按位运算
- 17、方法后面不加小括号
- 18、返回多个值
- 19、实现continue
- 20、虚变量
- 转载自:https://blog.csdn.net/weixin_43994445/article/details/109135215
1.把数值转成16进制的格式
print(string.format('%x', 1221197823))输出:
48c9ffff
2.去掉商里的小数
- 背景:用"/"来做除法, 得到的结果中总会带有小数, 像这样:
print(700 / 100)
print(701 / 100)输出:
7.0
7.01
- 需求:当结果是7.0时去掉小数部分, 当结果是7.01的时候要保留小数部分
- 思路:
local t1, t2 = math.modf(700 / 100)
print(t1)
print(t2)输出:
7 --t1是7
0.0 --t2是0.0,存的小数部分
function GetFixedQuotient(num1, num2)quotient = num1 / num2local t1, t2 = math.modf(quotient)-- 去掉数字后面的.0if t2 == 0 thenreturn t1 //t1是整数elsereturn quotient //quotient是整数+小数end
end
print(GetFixedQuotient(700, 100))
print(GetFixedQuotient(701, 100))输出:
7
7.01
3.string.format()保留三位小数
print(string.format('%.3f',0.5))
print(string.format('%.3f',0.0005))
print(string.format('%.3f',0.0004))
print(string.format('%.3f',500))输出:
0.500
0.001(这里四舍五入了)
0.000(这里四舍五入了)
500.000
4.向上/下取整,四舍五入
1.取整
print('向上取整:1/3 = ' .. math.ceil(1/3))
print('向下取整:1/3 = ' .. math.floor(1/3))2.四舍五入
print('四舍五入:1/3 = '..math.floor(1/3 + 0.5))
print('四舍五入:2/3 = '..math.floor(2/3 + 0.5))3.保留三位小数的四舍五入
print('四舍五入:1/3 = '..math.floor(1/3*1000 + 0.5)/1000)
print('四舍五入: 2 / 3 = ' .. math.floor(2 / 3 * 1000 + 0.5) / 1000)输出:
向上取整: 1 / 3 = 1
向下取整: 1 / 3 = 0
四舍五入: 1 / 3 = 0
四舍五入: 2 / 3 = 1
四舍五入: 1 / 3 = 0.333
四舍五入: 2 / 3 = 0.6674.但是以上代码如果处于0.5会有错误,下面是优化的代码
local function round(x) local data1,data2 = math.modf(x) if(x >= 0) then if(0.5 <= math.abs(data2)) then return data1+1 else return data1 end end if(0.5 <= math.abs(data2)) then return data1-1 else return data1 end
endlocal l1 = round(3.5)
local l2 = round(3.4)
local l3 = round(3.6)
local l4 = round(-3.2)
local l5 = round(-3.6)
print(l1,l2,l3,l4,l5)//----------------------------
[root@legend2 codeTrain]# lua test8.lua 4 3 4 -3 -4
5.string字符串拆成表
input = "ab23^&*)$大大大"
tabA={}
for i=1,#input dolet = string.sub(input,i,i)//let就是单个字符table.insert(tabA,i,let) //插入表tabA,i对应字符print(i,let)
end
- 效果
root@iZbp1do67v9l7zwkcs2b22Z:~/kunmk/test/lua# lua test.lua
1 a
2 b
3 2
4 3
5 ^
6 &
7 *
8 )
9 $
10 �
11 �
12 �
13 �
14 �
15 �
16 �
17 �
18 �
6.敏感词过滤
input = 'ABc大大大'
word = 'bc大'
lower = string.lower(input)
result = lower
if string.find(lower, tostring(word)) ~= nil then-- 汉字占3个字符, 所以不能直接用string.len()local _, count = string.gsub(word, '[^\128-\193]', '')print(count)local stars = string.rep('*', count)print(stars)result = string.gsub(lower, tostring(word), stars)
end
print(result)
- 效果
root@iZbp1do67v9l7zwkcs2b22Z:~/kunmk/test/lua# lua test.lua
3
***
a***大大
7.同名传参/同名字段相关bug
1)2个同名传参, 第1个传参无效
function Do(arg, arg)print(arg)
end
Do(1, 2)输出:
2
2)2个同名字段, 第2个字段无效
a, a = 1, 2
print(a)输出:
1
8.表作为传参: 浅拷贝的相关bug
1)表作为参数传递时, 是浅拷贝,原表也会改变
如下↓, 改变"参数表"(arg)的内容, “原来的表”(tab)也会改变
function ReName(arg)arg.name = '咸蛋超人'
end
tab = {name = '奥特曼'}
ReName(tab)
print(tab.name)输出:
咸蛋超人
2)但是, 改变arg表自身, tab不变
function ReName(arg)arg = {name = '咸蛋超人'}
end
tab = {name = '奥特曼'}
ReName(tab)
print(tab.name)输出:
奥特曼
9.windwos安装lua
传送门
10.通配符,正则表达式
s = "abc \"it's a cat\""
_, _, _, d = string.find(s, "([\"'])(.-)%1")
print(d) -----输出: it's a cat
11.用正则实现trim()
name = ' 蒂纳 奥特曼 '
local _name = string.gsub(name, '^%s*(.-)%s*$', '%1')
print(_name)输出:蒂纳 奥特曼
12.字符串截取string.sub()的使用方法
s = 'abcde'print(string.sub(s, 1, 3)) -- 从1数到3
print(string.sub(s, 3, 3)) -- 从3数到3
print(string.sub(s, 3)) -- 从3数到末尾
print(string.sub(s, 8)) -- 没有8,直接空了
print(string.sub(s, 3, -1)) -- 从3数到5(末尾)
print(string.sub(s, 3, -2)) -- 从3数到4(末尾-1)
print(string.sub(s, -4, -2)) --从2(末尾-3)数到4(末尾-1)
print(string.sub(s, -9))-- 从头数到尾-- 输出:
abc
c
cdecde
cd
bcd
abcde
13.数组增删
数组能用, 字典不行
table.insert(list, [pos, ]value), -- 不给pos就是#list+1
table.remove(list[, pos]), -- 不给pos就是#list
注意: 在for的时候, 要从后往前删
14.if后面跟一个方法, 这个方法会运行
function fun()print(2)
end
if fun() then
end输出: 2
↓写成这样则不执行
if fun then
end
15、// 运算, 取商
//是取商符号
print(5 // 2)
print(5.0 // 2)
print(5 // 2.0)输出:
2
2.0
2.0
注意: 当被除数或除数为浮点数时, 结果也是浮点数
16、按位运算
a~b 按位异或
~a 按位取反
17、方法后面不加小括号
function aaa(t)print(t[1])
end
--因为传参是table, 所以可省略小括号
--正常写法为:
a = aaa({2, 3})
--省略写法为:
a = aaa {2, 3}----
a = aaa{"a", "b"}
》打印"a"
18、返回多个值
function fun()return 1, 2, 3
end
print("额", fun())
print(fun(), "额") -- 因为fun不是最后一个, 所以只返回一个值
print((fun())) -- 强制仅返回一个值输出:
额 1 2 3
1 额
1
19、实现continue
- 思路
思路: 用一次性while里的if-break作为continue
for i = 1, 10 dowhile true doif i > 3 and i < 8 thenbreakendprint(i)breakend
end
输出:
1 2 3 8 9 10
20、虚变量
(虚设变量/ 虚拟变量/ 名义变量/ 哑元变量/ 哑变量 叫啥玩意都行)
t = {'迪迦', '戴拿', '蒂格', '蒂纳'}
for k, v in pairs(t) doprint(v)
end
->↓此写法表示: 我不需要理会k这个变量 , 即, 虚变量t = {'迪迦', '戴拿', '蒂格', '蒂纳'}
for _, v in pairs(t) doprint(v)
end
lua的坑(持续更新,每日更新两篇,9/15),更新到17个相关推荐
- 三星android9更新通知,三星两款老旗舰更新Android9.0系统,你的手机收到推送了吗?...
原标题:三星两款老旗舰更新Android9.0系统,你的手机收到推送了吗? 三星在今天发布了最新的S10系列手机,引发了不少人的关注,但是笔者也发现,三星今天还有一个举动--为两款老旗舰推送了Andr ...
- 2017lol服务器维修,LOL2017年8月15日更新维护到几点 8.15更新内容
最近LOL公布了8月15日的游戏更新消息,这次更新7.16版本将从上午4点持续到中午12点,由于更新内容比较多,所以维护时间比较长,更新之际大家可以看看下面更新内容详细介绍. 亲爱的召唤师, LOL将 ...
- android asynctask源码分析,Android通过Handler与AsyncTask两种方式动态更新ListView(附源码)...
本文实例讲述了Android通过Handler与AsyncTask两种方式动态更新ListView的方法.分享给大家供大家参考,具体如下: 有时候我们需要修改已经生成的列表,添加或者修改数据,noti ...
- emui华为java2p_大文件包来了!两款华为手机依然在更新,EMUI两大功能很实用
原标题:大文件包来了!两款华为手机依然在更新,EMUI两大功能很实用 当硬件遇到瓶颈的时候,很多厂商开始回调,作为手机重要的一环系统体验尤为关键.2020年都在拼旗舰配置.强悍拍照.5G覆盖,但普通用 ...
- oracle表与表之间更新,Oracle 两个表之间更新的实现
Oracle中,如果跨两个表进行更新,Sql语句写成这样,Oracle 不会通过.查了资料,Sql语句需要这样写才行 前提条件: 表info_user中有字段id和name,字段id为索引 表data ...
- Android 更新UI的两种方法——handler和runOnUiThread()
Android 更新UI的两种方法--handler和runOnUiThread() 在Android开发过程中,常需要更新界面的UI.而更新UI是要主线程来更新的,即UI线程更新.如果在主线线程之外 ...
- React Native项目使用react-apollo实现更新缓存的两种方式
背景: 举个例子:在显示动态的页面中删除某一条动态之后退出该页,当再进入该页之后这个被删除的动态是否还显示? 显示! 为啥? cache! cache是为了增强用户体验,如果每一次进入一个页面都需要从 ...
- MySQL 两张表关联更新(用一个表的数据更新另一个表的数据)两个表使用条件从另外一个表获取数据更新本表
MySQL 两张表关联更新(用一个表的数据更新另一个表的数据)两个表使用条件从另外一个表获取数据更新本表 有两张表,info1, info2 . info1: info2: 方式一:要用info2中的 ...
- Word中批量更新域的两个小方法
一处域更新 如果只有一处需要更新,对着域右键选择 "更新域" 即可. 多处域更新 很多需要更新的时候,可以如下操作(两种方法应该都可以) 选择"打印预览",可以 ...
- electron在线升级更新的两种方式(整体更新和部分更新)及我是如何实现electron在线升级热更新功能的?(企业级项目已上线)
这篇主要以讲解部分资源在线热更新的实现为核心,electron自带的整体更新的实现较简单,简单说一下即可,如有疑问点的可以自行查阅相关资料或在下面留言给我即可 一.electron的在线升级更新方式都 ...
最新文章
- 图片渲染延迟_前向渲染与延迟渲染
- php中empty(), is_null(), isset()函数区别
- 微信支付接口开发过程
- 设计爬虫Hawk背后的故事
- python——成语接龙小游戏
- Flutter AnimatedOpacity 实现透明度渐变动画效果
- HTML/CSS水平垂直居中方法(待补充)
- 网站SEO域名、URL路径优化
- ArcGIS操作总结(更新中......)
- 使用QXDM Log 來分析LTE環境資訊
- vb.net 画多个矩形_电气原理图和接线图识图方法,电气接线图怎么画?
- 如何在ubuntu22.04上使用微软精英手柄
- 我用Python写了一个论文降重工具
- 【学习笔记】斯坦福大学公开课(机器学习) 之生成学习算法:朴素贝叶斯
- 五大云存储服务对比:iCloud、Google...
- Shiro基本入门教程—叩丁狼Java培训
- 项目在云服务器上的绝对路径,云服务器上的绝对路径
- 估算负反馈运算放大电路的闭环电压放大倍数
- 操作系统真象还原第3章:完善MBR
- 有关狼人杀的专业名词及表水思路
热门文章
- 374C. Inna and Dima
- 服务器c盘里面哪些是临时文件,别再让你系统产生的大量临时文件占用C盘了的方法...
- GB2312编码范围
- 软件测试工程师面试题之操作系统
- java实现通讯录部分截图
- 亿级视频内容如何实时更新?
- uniapp,从文件流获取图片地址,并展示图片
- ffmpeg 为取经而来_取经路上的妖魔鬼怪,傻傻分不清楚
- YOLO模型train.py文件报错:size mismatch for last_layer0.6.weight: copying a param with shape torch.
- BoxSup: Exploiting Bounding Boxes to Supervise Convolutional Networks for Semantic Segmentation