
lua基础
hp_cpp
这个作者很懒,什么都没留下…
展开
-
lua 判断table是否为空的正确做法
问题:local a = {}如何判断a是否为空表?做法一:如果a是数组,那么#a返回的是数组的长度,直接判断#a == 0就可以了。这个是前提的:a必须是数组才能这样做,或者有数字做key,其从1开始的。代码举例:local a = { ["2"] = "world", [2] = "Hello", ["3"] = "world2",}local b = {}local c = { ["2"] = "world", [1] = "Hello", ["3"] = "wor原创 2020-08-26 19:19:51 · 6122 阅读 · 2 评论 -
Lua元表——实现集合运算(一)
Lua元表(Metatable)在 Lua table 中我们可以访问对应的key来得到value值,但是却无法对两个 table 进行操作。因此 Lua 提供了元表(Metatable),允许我们改变table的行为,每个行为关联了对应的元方法。举个例子:local t1 = {1}local t2 = {2}local t3 = t1 + t2就会报错:lua: xx.lua:3: attempt to perform arithmetic on a table value (loca原创 2020-07-22 11:25:10 · 2202 阅读 · 0 评论 -
lua 获取文件名和扩展名
local str = "aaa.bbb.bbb.txt"--获取文件名function getFileName(str) local idx = str:match(".+()%.%w+$") if(idx) then return str:sub(1, idx-1) else return str endend--获取扩展名function getExtension(str) return str:match(".+%转载 2020-07-21 10:02:50 · 1833 阅读 · 0 评论 -
Lua二进制方式拷贝文件(图片)
lua中没有文件拷贝的函数,但是有简单的文件读写函数。以二进制方式读取源文件的全部内容,然后再全部写到目标文件中,就完成了文件的拷贝1.luafunction copyFunc(destFilePath, sourceFilePath) local sourceFile, errorString = io.open(sourceFilePath, "rb") assert(sourceFile ~= nil, errorString) local data = sourceFile:read(原创 2020-07-19 16:30:54 · 1886 阅读 · 0 评论 -
lua file:read(“a“) 一次性读取大文件的源码分析
Lua读取文件时,一次性读取整个文件,输入文件的最大支持多大?找了官网文档也没找到说明,于是索性去看lua的源码。首先从liolib.c 开始看:/*** functions for 'io' library*/static const luaL_Reg iolib[] = { {"close", io_close}, {"flush", io_flush}, {"input", io_input}, {"lines", io_lines}, {"open", io_open原创 2020-07-19 16:12:44 · 4200 阅读 · 0 评论 -
lua中的string.len()的注意点
学过C语言的都知道,C语言里有个strlen,strlen() 函数计算的是字符串的实际长度,遇到第一个’\0’结束。就以为lua中的string.len()的用法也类似,其实不然,查官方帮助文档:(lua 5.3的)http://www.lua.org/manual/5.3/manual.html#pdf-string.lenstring.len (s)Receives a string and returns its length. The empty string “” hasleng原创 2020-07-18 16:05:56 · 4291 阅读 · 0 评论 -
windows环境下利用VS编译luasocket
为了更方便地学习和使用skynet框架,本地用lua写个简易客户端进行测试,也是个不错的选择。前提是你在windows上编译了一份动态库版本的lua,以下以vs2017编译器为例。动态库版本lua5.3.5一份,如果没有,我的之前博客:vs2017编译Lua最新源码,生成动态链接库版本下载地址:https://github.com/diegonehab/luasocket.git用vs2017打开luasocket.sln解决方案根据该解决方案的属性,它是根据几个环节变量来确定lua的头文件所原创 2020-07-15 20:41:21 · 2259 阅读 · 9 评论 -
skynet中使用cjson
skynet早期版本有lua-cjson库,后来使用sproto取代了cjson,也直接将代码移除,但游戏中还是有json的需求。lua5.3开始支持整形,但cjson并没有适配lua5.3, 如果直接编译使用会造成将json串中的数字转为浮点数。所幸云风为cjson出一个补丁:https://github.com/mpx/lua-cjson/pull/22当然如果感觉麻烦,还可以直接使用云风维护的一个分支:https://github.com/cloudwu/lua-cjson这里以skynet中原创 2020-06-19 19:54:57 · 1334 阅读 · 0 评论 -
lua中协程的学习(一)
在书《Lua程序设计(第4版)》的协程一章,第273-274页,书上有个例子,让我困惑不已,后来把之前看到的一篇博客——Lua的协程和协程库详解反复看了两遍,自己动手写了demo测试,才解开心中的疑惑,特此记录,以帮助同样遇到困惑的朋友。函数coroutine.resume (co [, val1, ···])用来启动或再次启动一个协程,使其由挂起状态变成运行状态。resume函数相当于在...原创 2020-03-17 10:13:43 · 339 阅读 · 0 评论 -
lua打印table
在调试lua代码的时候,经常需要看table里的内容,这时候一般都是将打印table的方法放到工具模块中,方便调用。现在写一个简单的工具模块util.lualocal util = {}local function get_type_first_print( t ) local str = type(t) return string.upper(string.sub(st...原创 2020-03-15 17:45:30 · 882 阅读 · 0 评论 -
Lua(>=5.3)中的table.move实例讲解
为了方便输出,我们这里先介绍另外一个一、table.concat()原型:table.concat (table [, sep [, i [, j]]])解释:返回表中的特定项连接后的数据,要求所连接的数据必须为数字或者字符串,级返回table[i]..sep..table[i+1] ··· sep..table[j],其中参数sep表示连接符,默认为空字符串"",参数i默认为1,参数...原创 2020-03-07 11:53:21 · 5253 阅读 · 1 评论 -
图解lua和C——table传递参数过程
先写测试lua脚本:local mytable = require("mytable")local tb = {"hello", "world"}local element = mytable.get(tb, 1)这个mytable就是我们用C语言编译的库,给lua调用。local element = mytable.get(tb, 1)这个函数从lua向c传递了2个参数,第一个参...原创 2020-03-06 13:30:16 · 2313 阅读 · 0 评论 -
lua调用C库之——字符串切割存到table中
main.c#include <stdio.h>#include <string.h>#include <lua.h>#include <lauxlib.h>#include <lualib.h>static int l_split(lua_State* L){ const char *s = luaL_checkstr...原创 2020-03-04 14:15:29 · 405 阅读 · 0 评论 -
lua与C交互之——对lua数组的每个元素调用同一个函数
main.c#include <stdio.h>#include <string.h>#include <lua.h>#include <lauxlib.h>#include <lualib.h>static int l_map(lua_State* L){ int i, n; //第一个参数必须是一张表 luaL...原创 2020-03-04 10:23:39 · 592 阅读 · 0 评论 -
Lua调用C库之require("xx.xx")类型包的命名规则
在看skynet中遇到类似require(“skynet.core”)或者require "skynet.core"这样写的,对于这个中间有.的包名,如果C库写的,那么这个文件的命名应该是怎么样的呢?在windows上这样的文件是xx.dll,linux上是xx.so,我们来了解一下这样的动态库怎么写和命名。以windows上为例:(具体怎么将main.c编译成lua调用的dll,可以查看h...原创 2020-03-03 09:58:58 · 1306 阅读 · 0 评论 -
lua调用c详解Windows版,以及一些踩过的坑
新将项目mylib添加main.c文件,设置工程为Release x64版在设置中添加lua的头文件目录:添加lua.lib方式一:或者采用方式二添加lua.lib#pragma comment(lib,"D:\\Program Files\\lua-5.3.5\\build\\lua.lib")本文采用方式一继续设置:main.c源码:#include <...原创 2020-02-29 13:43:59 · 1466 阅读 · 0 评论 -
vs2017编译Lua最新源码,生成动态链接库版本
一、去官网下载lua5.3.5源码包https://www.lua.org/download.html点击download可以看到历时版本:https://www.lua.org/ftp/这里可以看到需要的版本,点击下载。二、建立VS工程点击确定这里根据需要选择x64,还是x86三、解压lua源码包将下载的lua源码包解压出来,我这里解压到了E盘根目录,以此路径为例:...原创 2020-02-29 09:06:25 · 2839 阅读 · 2 评论 -
ubuntu上安装luarocks,并添加LuaFileSystem
前提条件:安装了Lua,并且环境是完整的。这里说Lua环境是完整的,是指include和lib等都有lua相关文件。具体参考我的博客,如何安装Lua1.假定已经安装了Lua5.3.5(其他版本的也可以)检查这几个地方,如下图所示:这时候,Lua的环境才是完整的,以Lua 5.3.5为例。2.下载luarocks源码包https://luarocks.github.io/luaro...原创 2019-02-19 11:20:03 · 2748 阅读 · 4 评论 -
ubuntu上安装Lua(源码安装方式,可指定版本)
1.下载lua源码包:http://www.lua.org/download.htmllua的官网首页可以下载最新的源码包也可以通过http://www.lua.org/ftp/下载历史版本的lua源码包2.解压以Ubuntu16.0.4或者Ubuntu18.0.4为例安装lua 5.3.5把lua压缩文件放在/home/个人/文件夹下(个人喜好),解压:sudo tar -zxv...原创 2019-02-18 19:49:59 · 2202 阅读 · 0 评论 -
VS2015中搭建lua环境
VS2015中搭建lua环境一 生成lua5.3.lib1、下载并编译lua源码2、启动VS2015创建新的项目二 Lua测试转自https://blog.csdn.net/pangjiuzala/article/details/52587976所以本篇博文介绍在Windows平台下,使用VS2015搭建lua开发环境的一些侥幸成功经验,安装过程参考网上教程,安装过程如下(参考http:/...转载 2019-01-24 09:51:45 · 368 阅读 · 1 评论 -
Lua中的元方法__newindex详解
转载请注明,原文地址:http://www.benmutou.com/archives/1777文章来源:笨木头与游戏开发1.查询与更新上一篇文章我们介绍了__index元方法,总结来说,__index元方法是用于处理调用table中不存在的字段。注意,【调用】这个词,只是调用,而不是赋值。 如果,我们要对table中某个不存在的字段赋值呢?(小转载 2016-01-20 11:12:27 · 382 阅读 · 0 评论 -
lua table中如何判断为空表
在项目的脚本lua中经常有这样的需求, 1、local a = {} 2、对a进行处理 3、对a是否为空表进行判断 关于对a是否为空表的判断,我发现有些代码如此做: if a == {} then 这样的结果就是a == {}永远返回false,是一个逻辑错误。因为这里比较的是table a和一个匿名table的内存地址。 也有些代码如此做: if table.maxn(a) ==转载 2016-01-17 10:05:28 · 3532 阅读 · 0 评论 -
Lua中table的使用
原文地址:http://www.yiibai.com/lua/lua_tables.html 表格是唯一的数据结构中Lua可以帮助我们创造出不同的类型,如数组和字典。 Lua使用关联数组和可不仅数字,但也有不同的零字符串索引。表格都没有固定的大小,并根据需要可以增长。Lua采用的所有陈述,包括包装的代表性表。当我们访问一个方法的字符串。格式,这意味着,我们正在访问的格式化功能的字符串封装。表示和用转载 2015-11-25 20:14:01 · 439 阅读 · 0 评论