文章目录

  • 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个相关推荐

  1. 三星android9更新通知,三星两款老旗舰更新Android9.0系统,你的手机收到推送了吗?...

    原标题:三星两款老旗舰更新Android9.0系统,你的手机收到推送了吗? 三星在今天发布了最新的S10系列手机,引发了不少人的关注,但是笔者也发现,三星今天还有一个举动--为两款老旗舰推送了Andr ...

  2. 2017lol服务器维修,LOL2017年8月15日更新维护到几点 8.15更新内容

    最近LOL公布了8月15日的游戏更新消息,这次更新7.16版本将从上午4点持续到中午12点,由于更新内容比较多,所以维护时间比较长,更新之际大家可以看看下面更新内容详细介绍. 亲爱的召唤师, LOL将 ...

  3. android asynctask源码分析,Android通过Handler与AsyncTask两种方式动态更新ListView(附源码)...

    本文实例讲述了Android通过Handler与AsyncTask两种方式动态更新ListView的方法.分享给大家供大家参考,具体如下: 有时候我们需要修改已经生成的列表,添加或者修改数据,noti ...

  4. emui华为java2p_大文件包来了!两款华为手机依然在更新,EMUI两大功能很实用

    原标题:大文件包来了!两款华为手机依然在更新,EMUI两大功能很实用 当硬件遇到瓶颈的时候,很多厂商开始回调,作为手机重要的一环系统体验尤为关键.2020年都在拼旗舰配置.强悍拍照.5G覆盖,但普通用 ...

  5. oracle表与表之间更新,Oracle 两个表之间更新的实现

    Oracle中,如果跨两个表进行更新,Sql语句写成这样,Oracle 不会通过.查了资料,Sql语句需要这样写才行 前提条件: 表info_user中有字段id和name,字段id为索引 表data ...

  6. Android 更新UI的两种方法——handler和runOnUiThread()

    Android 更新UI的两种方法--handler和runOnUiThread() 在Android开发过程中,常需要更新界面的UI.而更新UI是要主线程来更新的,即UI线程更新.如果在主线线程之外 ...

  7. React Native项目使用react-apollo实现更新缓存的两种方式

    背景: 举个例子:在显示动态的页面中删除某一条动态之后退出该页,当再进入该页之后这个被删除的动态是否还显示? 显示! 为啥? cache! cache是为了增强用户体验,如果每一次进入一个页面都需要从 ...

  8. MySQL 两张表关联更新(用一个表的数据更新另一个表的数据)两个表使用条件从另外一个表获取数据更新本表

    MySQL 两张表关联更新(用一个表的数据更新另一个表的数据)两个表使用条件从另外一个表获取数据更新本表 有两张表,info1, info2 . info1: info2: 方式一:要用info2中的 ...

  9. Word中批量更新域的两个小方法

    一处域更新 如果只有一处需要更新,对着域右键选择 "更新域" 即可. 多处域更新 很多需要更新的时候,可以如下操作(两种方法应该都可以) 选择"打印预览",可以 ...

  10. electron在线升级更新的两种方式(整体更新和部分更新)及我是如何实现electron在线升级热更新功能的?(企业级项目已上线)

    这篇主要以讲解部分资源在线热更新的实现为核心,electron自带的整体更新的实现较简单,简单说一下即可,如有疑问点的可以自行查阅相关资料或在下面留言给我即可 一.electron的在线升级更新方式都 ...

最新文章

  1. 图片渲染延迟_前向渲染与延迟渲染
  2. php中empty(), is_null(), isset()函数区别
  3. 微信支付接口开发过程
  4. 设计爬虫Hawk背后的故事
  5. python——成语接龙小游戏
  6. Flutter AnimatedOpacity 实现透明度渐变动画效果
  7. HTML/CSS水平垂直居中方法(待补充)
  8. 网站SEO域名、URL路径优化
  9. ArcGIS操作总结(更新中......)
  10. 使用QXDM Log 來分析LTE環境資訊
  11. vb.net 画多个矩形_电气原理图和接线图识图方法,电气接线图怎么画?
  12. 如何在ubuntu22.04上使用微软精英手柄
  13. 我用Python写了一个论文降重工具
  14. 【学习笔记】斯坦福大学公开课(机器学习) 之生成学习算法:朴素贝叶斯
  15. 五大云存储服务对比:iCloud、Google...
  16. Shiro基本入门教程—叩丁狼Java培训
  17. 项目在云服务器上的绝对路径,云服务器上的绝对路径
  18. 估算负反馈运算放大电路的闭环电压放大倍数
  19. 操作系统真象还原第3章:完善MBR
  20. 有关狼人杀的专业名词及表水思路

热门文章

  1. 374C. Inna and Dima
  2. 服务器c盘里面哪些是临时文件,别再让你系统产生的大量临时文件占用C盘了的方法...
  3. GB2312编码范围
  4. 软件测试工程师面试题之操作系统
  5. java实现通讯录部分截图
  6. 亿级视频内容如何实时更新?
  7. uniapp,从文件流获取图片地址,并展示图片
  8. ffmpeg 为取经而来_取经路上的妖魔鬼怪,傻傻分不清楚
  9. YOLO模型train.py文件报错:size mismatch for last_layer0.6.weight: copying a param with shape torch.
  10. BoxSup: Exploiting Bounding Boxes to Supervise Convolutional Networks for Semantic Segmentation