Lua
利来利往
幽默,诚实,守时,守信,适应能力强。
展开
-
【算法】跑得快AI
代码不全,但是函数可以复用原创 2022-07-13 13:27:20 · 2159 阅读 · 8 评论 -
[lua性能小技巧]降低垃圾生成速度,尽量复用对象
比把循环中公用的临时变量提到循环体外。转载 2022-06-07 17:03:14 · 85 阅读 · 0 评论 -
[lua性能小技巧]把全局函数先取到本地再使用
了解了Lua的全局变量存取过程的细节,就会明白为啥全局变量存取性能低下的原因了。下面的表格对比了全局变量存取和local变量存取的区别:全局变量涉及的到表的查询和修改,所以性能要显著差于local变量。简单的性能测试也可以看出来。...转载 2022-06-07 17:00:59 · 147 阅读 · 0 评论 -
[lua性能小技巧]表的内存节约
lua中的基本类型,至少也要占用12个字节。应用程序把从C切换到Lua,内存占用会如何呢? 通过下面的比较,大概可以有个结论。在程序中存储一个多边形的所有的顶点,假定这个多边形有100万个顶点,用3种Lua的表达形式和C做对比:...转载 2022-06-07 16:52:28 · 331 阅读 · 0 评论 -
[lua性能小技巧]让Lua的编译器预分配空间
默认创建出来的的表,都是空的,在插入元素的过程,逐渐翻倍扩大,从0到1, 1到2,2到4,...都会触发realloc,同时把旧元素拷贝到新申请的空间中,对于最终有成千上万个元素的table,扩张的开销可以接受,但是对于大量生成小的table的场景,会明显拖慢性能,可以通过lua的构造函数,让Lua的编译器预分配空间,比如下面的代码:...转载 2022-06-07 16:46:53 · 258 阅读 · 0 评论 -
[lua那些面试题]Lua中实现一个私有变量或者函数
访问公共函数 300lua: test.lua:30: attempt to call method 'g' (a nil value)stack traceback: test.lua:30: in main chunk [C]: ?原创 2022-06-06 17:01:01 · 252 阅读 · 0 评论 -
redis的value为nil引发的bug
function redisRank:upRank(data) if(data.RankType == Command.RankType.GoldWinIndex)then self.Redis:zincrby(self:generateKey(data.RankType), data.count, tostring(data.uid)) else self.Redis:zadd(self:generateKey(data.RankType), data.c.原创 2022-05-31 09:28:18 · 1451 阅读 · 0 评论 -
lua redis排行榜
local redisRank = class("redisRank")local redis = require "lua.base.redis"local Command = require('lua.rank.command')local cjson = require("cjson")local Date = require('lua.system.date')local MailMgr = require('lua.hall.module.mailMgr')local DbTool..原创 2022-05-30 10:15:06 · 251 阅读 · 0 评论 -
xpcall让lua报错后继续执行后面的代码
function traceback(err) print("LUA ERROR: " .. tostring(err)) print(debug.traceback())endlocal function main() self:hello() --function is null print("hello")endlocal status = xpcall(main, traceback)print("status: ", status)print("-----------.原创 2022-05-26 13:39:25 · 462 阅读 · 0 评论 -
lua 异步调用 Async库
-- 引入Asynclocal Async = require("Async")-- 创建Async-- 可传递参数到接下来的调用中Async.New(...)-- 注册异步调用Async.New(...):Ok(function(ok, no, ...) return no() end) -- 在Ok管道注册回调, 之后进入No管道:No(function(ok, no, ...) return ok() end) -- 在No管道注册回调, 之后进入Ok管道:Ok.转载 2022-05-26 11:32:54 · 746 阅读 · 0 评论 -
myql批量插入
insert into values (),(),();function backMgr:run() local nMax = #ConsumeLogList if(nMax <= 0)then return end local sql = string.format('insert into `%s` (user_id, item_id, item_count, paid_date, product_id, product_name) value原创 2022-05-26 10:14:49 · 102 阅读 · 0 评论 -
lua 链接redis
一、安装luarocks包管理工具对于centos7,直接可以通过yum 安装luarocks如果yum里搜索不到,按照官方文档自己编译安装吧二、依赖安装luarocks安装lua软件时一般都需要编译(这也是lua性能高的原因吧)yum install gcc* lua-devel -y三、安装luarocks install redis-lua会使用gcc进行编译安装-----------------------------------Lua配置连接redishtt.转载 2022-05-24 16:16:02 · 1090 阅读 · 0 评论 -
随机非连续lua配置表,要求相近的不重复
local RAND_INDEX = 1--获得机器人配置function Room:getBotPlayerInfo(session, t) local seatId = t:getTableType() local gameinfo = GetConfig("gameinfo",seatId) or {} local siteLevel = gameinfo.siteLevel or 1 RAND_INDEX = RAND_INDEX + 1 local cfg = GetConfig(.原创 2022-05-19 12:54:35 · 124 阅读 · 0 评论 -
有序序列去重
local tmpHands = {23,43,44,65,26,46,67,48,68,29,69,70,12,13,53,73,21,2,22,36}-- 这个是对扑克牌取值,和去重没关系function ddzGetCardValue(cbCardData) if(not cbCardData)then return 0 end cbCardData = cbCardData % 20 if(cbCardData == 1)then return 14 end if(cb..原创 2022-05-14 10:55:58 · 182 阅读 · 0 评论 -
lua生成唯一id
function guid() local seed={'e','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f'} local tb={} for i=1,32 do table.insert(tb,seed[math.random(1,16)]) end local sid=table.concat(tb) return string.format('%s-%s-%s-%.转载 2022-04-13 16:57:21 · 1028 阅读 · 0 评论 -
【那些面试题】lua 的if
原创 2022-04-07 10:35:55 · 80 阅读 · 0 评论 -
lua一个类代码太多,拆文件方法
local a = {}local b = {}a.init = function() a.b = b a.b.test(a) b.init(a)enda.test = function() print("this is a")endb.init = function (a) b.a = a b.a.test()endb.test = function (a) a.test()enda.init()比如A类文件太长,那么新建一个B类,大部分代码写在..原创 2022-03-17 17:55:49 · 681 阅读 · 0 评论 -
lua以xpcall实现try/catch功能
-- 打印错误信息local function __TRACKBACK__(errmsg) local track_text = debug.traceback(tostring(errmsg), 6); print("---------------------------------------- TRACKBACK ----------------------------------------"); print(track_text, "LUA ERROR"); p.转载 2022-03-09 14:19:49 · 445 阅读 · 0 评论 -
LuaForWindows安装失败及解决方法
安装LuaForWindows失败,提示无法与服务器连接,是因为我们电脑上缺少VC2005 的运行库,下载一个插件就行。下载链接点击原创 2021-05-25 17:20:31 · 591 阅读 · 0 评论 -
【面试】lua
面试题-lua1.lua热更2.lua和C++交互3.lua禁止修改表4.lua禁止全局变量5.lua原表6.lua gc要打破require缓存机制,我们必须删除缓存,package.loaded[module_name] = nil就可以做到。https://blog.csdn.net/zxm342698145/article/details/80613429lua和c++是通过一个虚拟栈来交互的。c++调用lua实际上是:由c++先把数据放入栈中,由lua去栈中取数据,然后返原创 2021-04-20 12:34:48 · 806 阅读 · 0 评论 -
【手游项目5】skynet-3
本篇为实战了,如果有些代码看不懂,或者skynet找不到,请下载demohttps://github.com/sundream/ggApp1.集群cluster = require "skynet.cluster"集群间的通讯,是由一个独立的 harbor 服务来完成的。所有的消息包在发送时,skynet 识别出这是一个远程消息包时,都会把它转发到 harbor 服务内。harbor 服务会建立 tcp 连接到所有它认识的其它 skynet 节点内的 harbor 服务上。https:/.原创 2020-12-24 17:01:49 · 605 阅读 · 1 评论 -
【手游项目5】skynet-2
GateServerGate 只负责读取外部数据,但不负责回写。也就是说,向这些连接发送数据不是它的职责范畴。作为示范,skynet 开源项目实现了一个简单的回写代理服务,叫做 service_client 。启动这个服务,启动时绑定一个 fd ,发送给这个服务的消息包,都会被加上两字节的长度包头,写给对应的 fd 。根据不同的分包协议,可以自己定制不同的 client 服务来解决向外部连接发送数据的模块。https://github.com/xzhovo/skynet-websocket-gat.原创 2020-12-24 16:59:03 · 435 阅读 · 1 评论 -
【手游项目5】skynet-1
skynet 概述Skynet 的核心功能就是发送消息和处理消息充分利用多核优势,将不同的业务放在独立的执行环境中处理,协同工作,Lua State 已经提供了良好的沙盒,隔离不同执行环境;多线程模式,可以使得状态共享、数据交换更加高效。https://blog.codingnow.com/2012/09/the_design_of_skynet.htmlhttps://blog.csdn.net/SnailCpp/article/details/807217561.为了提供高效的服务间通讯.原创 2020-12-24 16:56:03 · 279 阅读 · 1 评论 -
lua 获得系统时间
系统到现在多少秒local ntime = os.timeprint(ntime)代码如下:function CallChannel() local dateText = os.date("%c"); if dateText~="" then channel.GetChild(0):SetText(dateText); endend其中的%c可以是以下的一原创 2012-12-26 16:48:21 · 9657 阅读 · 0 评论 -
Lua 的元表怎么理解
给一个table关联元表 就是当你访问的这个table所访问的值不存在的时候 会返回默认的元表里的值可以理解成面向对象里的继承元表就是它的父类 如果本身有值就用本身的值 没值就用父类的值local t = {}local mt = {7,8,9}setmetatable(t,{__index = mt})print(t[3])mt是父类 t是子类可以理解成lua的面向对象原创 2016-03-14 14:48:12 · 505 阅读 · 0 评论 -
Lua continue
for i = 1, 100 do while true do if i % 2 == 1 then break end -- 这里有一大堆代码 -- -- break endendLua 里没有 continue 这个关键词,有时候挺不方便,可能导致循环里的 if-then 嵌套转载 2016-07-12 10:09:18 · 875 阅读 · 0 评论 -
lua位操作(感觉这效率较低)
--[[Description: FileName:bit.lua This module provides a selection of bitwise operations.History: Initial version created by 阵雨 2005-11-10.Notes: ....]]--[[{2147483648,1073741824,5转载 2014-08-20 11:31:49 · 4334 阅读 · 2 评论 -
Lua函数
在大多数Lua语法分析中可以获得这些标准Lua函数. 无可争辩, 我们可以查阅Lua网站, 但是一些少了的函数被Blizzard进行了调整. 下面列出了所有Lua函数. WoW API中的Lua注意在WoWAPI没有提供所有标准的Lua函数, 很显然, 操作系统以及文件I/O库是不支持的 Lua函数这些函数都是Lua编程语言的一部分, 点击这里了解更多. •assert转载 2014-08-20 11:30:57 · 601 阅读 · 0 评论 -
lua,修改字符串的某个字符
function mutstring (s) assert(type(s) == "string", "string expected") local ms = s or "" local u = newproxy(true) local mt = getmetatable(u) local relatpos = function(p) local l = #ms转载 2014-06-21 16:46:24 · 5678 阅读 · 0 评论 -
Lua中的元表与元方法
3 月 01 日 5657 3 月 02 日 71573 月 03 日 88163 月 04 日 77983 月 07 日 56473 月 08 日 7195 3 月 09 日 39763 月 10 日 1.47 亿3 月 11 日 3.93亿转载 2016-03-14 14:47:44 · 804 阅读 · 0 评论 -
Lua 造成的代码冗余太严重了, 这个现状怎么改善?
http://bbs.chinaunix.net/forum.php?mod=viewthread&tid=4054291&extra=&ordertype=1&page=1转载 2014-07-29 10:56:26 · 1131 阅读 · 0 评论 -
【Lua】LuaForWindows_v5.1.4-46安装失败解决方案
下个补丁pc6-vcredist_x86原创 2016-09-27 14:09:15 · 5358 阅读 · 0 评论 -
string.format() %d越界的问题
local tst = 999999999999999local strtest1 = "test%d"local strtest2 = "test%.0f"print(string.format(strtest1,tst))print(string.format(strtest2,tst))原创 2014-09-02 11:25:09 · 2077 阅读 · 0 评论 -
[手游新项目历程]-56-Lua string.gmatch() Lua io.lines()
Lua string.gmatch() 点击打开链接Lua io.lines() 点击打开链接原创 2013-10-31 18:16:01 · 1317 阅读 · 0 评论 -
[手游项目2]-3- lua位操作
--[[{2147483648,1073741824,536870912,268435456,134217728,67108864,33554432,16777216, 8388608,4194304,2097152,1048576,524288,262144,131072,65536, 32768,16384,8192,4096,2048,1024,512,256,1...原创 2018-04-23 15:32:35 · 279 阅读 · 0 评论 -
[手游项目2]-5- require 大小写问题
linux下 require 是区分大小写的,不仅是文件名,文件后缀也区分大小写原创 2018-06-20 18:41:45 · 838 阅读 · 0 评论 -
[手游项目2]-4- lua判断文件是否存在
function loadConfig(FileName) local f = io.open(FileName,"r") if(f == nil )then --BaseFuc.LuaLog("loading config["..FileName.."] false") return false end f:close() return trueend原创 2018-06-20 11:59:22 · 4357 阅读 · 0 评论 -
Lua 错误处理方法
虽然我们把Lua当作解释型语言,但是Lua会首先把代码预编译成中间码然后再执行(很多解释型语言都是这么做的)。在解释型语言中存在编译阶段听起来不合适,然而,解释型语言的特征不在于他们是否被编译,而是编译器是语言运行时的一部分,所以,执行编译产生的中间码速度会更快。我们可以说函数dofile的存在就是说明可以将Lua作为一种解释型语言被调用。前面我们介绍过dofile,把它当作Lua运行转载 2014-07-29 10:26:45 · 3673 阅读 · 0 评论 -
lua loadstring与loadfile
http://blog.csdn.net/icyday/article/details/8112686转载 2014-05-30 16:33:38 · 2124 阅读 · 0 评论 -
lua_touserdata
void *lua_touserdata(lua_State*L,intindex);如果给定索引处的值是一个完整的userdata,函数返回内存块的地址。如果值是一个lightuserdata,那么就返回它表示的指针。否则,返回NULL。例如: 在CCLuaStack::executeFunction()函数中有一段代码是用来获取c++调用lua返回值的。 // get retur转载 2014-05-27 20:41:47 · 9538 阅读 · 0 评论