一、Lua虚拟机的栈1.1先简单介绍下Lua虚拟机的栈,如图: &n
转载
2024-04-29 11:23:37
0阅读
1. Lua的堆栈和全局表我们来简单解释一下Lua的堆栈和全局表,堆栈大家应该会比较熟悉,它主要是用来让C++和Lua通信的,是的,它们并不认识对方,只能通过堆栈来沟通,就像写信一样。(旁白:它们不会用微信吗?!微信~!不知道?)Lua的全局表又是什么呢?可以想象成是一个map哈希表结构,比如Lua有一个变量:name = “hello”那么,全局表就存放了”name
转载
2024-05-24 21:06:15
73阅读
一、Lua堆栈要理解Lua和C++交互,首先要理解Lua堆栈。简单来说,Lua和C/C++语言通信的主要方法是一个无处不在的虚拟栈。栈的特点是先进后出。在Lua中,Lua堆栈就是一个struct,堆栈索引的方式可是是正数也可以是负数,区别是:正数索引1永远表示栈底,负数索引-1永远表示栈顶。如图: lua的栈类似于以下的定义, 它是在创建lua_State的时候创建的:  
转载
2024-06-04 07:54:29
45阅读
(一)通过一个简单的例子来看一下userdata的用法:写一个C的Lua库,让Lua能够访问C的数组,借助userdata来实现。(1)VS中新建一个DLL工程,设置好lua库的包含目录、链接库;(2)新建一个源文件main.cpp,代码如下: #include <stdio.h>
#include <string.h>
extern "C"
{
#inc
转载
2024-04-15 12:25:17
111阅读
【话从这里说起】在我发表《Lua中的类型与值》这篇文章时,应该好好总结一下Lua中的function和userdata类型。现在是时候总结了。对于function,我在《Lua中的函数》这篇文章中进行了总结,而这篇文章将会对Lua中的userdata进行仔细的总结。【userdata是啥?】userdata是啥?简单直译就是用户数据,如果再文艺一点,就叫做用户自定义数据。要这货有什么好处呢?首先,
转载
2024-04-24 22:23:45
297阅读
【测试环境】lua版本: 5.2.1【问题场景】在”luaL_dofile”处报错,并且没有任何错误信息。 代码如下:#ifdef __cplusplus
extern "C" {
#endif
#include "luajit-2.0/lua.h"
#include "luajit-2.0/lualib.h"
#include "luajit-2.0/lauxlib.h"
#ifdef __c
转载
2024-05-06 16:41:18
157阅读
本来打算3天将lua学完,无奈lua语法实在有点难记,所以还是好记性不如烂笔头,记录一下学习内容。 首先介绍一下lua的table,这是一个key-value型映射,可以动态增长。功能十分强大,并且lua只提供这一种容器。这也是为啥经常忘记的原因,因为仔细学起来有很多东西需要思考。 1. table之数组 这里的数组就是最简单的用整数来索
转载
2024-04-25 12:36:10
101阅读
一、Lua使用 lua_shared_dict 共享内存-共享进程间变量 共享内存就是在内存块中分配出一个空间,让几个不相干的进程都能访问存储在这里面的变量数据,实际我们用过的redis,memcache也具有共享内存的意义,redis,memcache等是更高级的可跨服务器的共享内存,在lua中使用共享内存也非常简单。语法:lua_shared_di
转载
2024-07-21 09:22:29
68阅读
函数有两种用途: 1).完成指定的任务,这种情况下函数作为调用语句使用; 2).计算并返回值,这种情况下函数作为赋值语句表达式使用。 1 function func_name (arguments-list)
2 statements-list;
3 end;
4
5 --调用函数的时候,如果参数列表为空,必须使用()表明是函数调用
6 print(8*9, 9/8)
转载
2024-03-26 08:31:09
161阅读
到目前为止,我们写的C函数都还是单个的函数,函数之间没有联系,也没有涉及返回C结构体以及指针,但实际的业务场景中肯定不会这么简单,比如我们现在要扩展lua使之能够操作redis,首先至少需要一个连接redis服务器的方法并返回一个连接句柄,然后用这个连接句柄来进行各种查询,最后使用结束还需要关闭这个连接句柄,通常来说,这个连接句柄会是一个结构体,那问题是该怎么返回这个结构体给lua呢。用C操作Re
转载
2024-03-26 12:46:53
107阅读
经过上一章的讲解,相信大家也看到了,Lua的堆栈是很重要不可或缺的,就像我的旁白一样(旁白:他竟然赞我了。。。好羞涩~)。虽然看起来没什么用,但是少了又绝对不行。(旁白:你妹纸的,你这算是赞人吗?) 笨木头花心贡献,啥?花心?不呢,是用心~正文: 在这里我仅简单解释一下Lua堆栈的索引,因为我们在很多操作里都涉及到堆栈的索引,比如上一章中我们要从堆栈中取
转载
2024-04-09 07:19:57
47阅读
Lua的堆栈是很重要不可或缺的,就像我的旁白一样(旁白:他竟然赞我了。。。好羞涩~)。虽然看起来没什么用,但是少了又绝对不行。 正文: Lua堆栈的索引,因为我们在很多操作里都涉及到堆栈的索引,比如上一章中我们要从堆栈中取得一个字符串,就必须给出堆栈索引: 1. /* 获取栈顶的值 */
2. const char* str = lua_tostring(pL, 1);
转载
2024-04-29 12:41:34
66阅读
在实际开发过程中,代码日志是必不可少的系统,尤其是在线上版本中,对于查找问题相当有帮助。但是cocos2dx lua的代码日志是基于lua的print打印,只写在console中,不会长久保存。怎么办,那么我们来设计一个简单的日志系统,让日志保存下来。 话不多说,直接上代码:(添加了注释)
转载
2024-03-16 13:24:20
134阅读
如何主动打印调用栈?如果是Java、Js,那么很简单,三行就能实现。但 VisualStudio 就复杂多了。如果不下断点,那么只能在崩溃的时候被动查看。而使用 Backward-Cpp ,只需在项目中拖入一个hpp文件,就可以主动打印。但默认输出是 stderr,无法在 VisualStudio 的 output 窗口看到任何信息。全网搜索半小时后,才从另外零星的代码片段中推得,需要将 stri
转载
2024-03-28 09:36:06
297阅读
3.1键盘录入的基本步骤3.1.1键盘录入数据概述我们目前在写程序的时候,数据值都是固定的,但是实际开发中,数据值肯定是变化的,所以,把数据改进为键盘录入,提高程序的灵活性。键盘录入数据的步骤:A:导包(位置放到class定义的上面)import java.util.Scanner;B:创建对象Scanner sc = new Scanner(System.in);C:接收数据int x = sc
目录1._.slice(array, [start=0], [end=array.length])——裁剪数组array,从 start 位置开始到end结束,但不包括 end 本身的位置。2._.sortedIndex(array, value)——使用二进制的方式检索来决定 value值应该插入到数组中尽可能小的索引位置,以保证array的排序
在处理 Redis 相关的项目时,使用 Lua 脚本能够极大地提升性能,尤其是在执行复杂事务和聚合操作时。然而,涉及到 Redis 与 Lua 脚本的关键操作及配置,常常会造成一些问题。本文将通过多个部分详细记录使用 Redis Lua 的 `key` 类型问题的解决过程,涵盖从环境准备到生态扩展的全流程。
## 环境准备
### 技术栈兼容性
要确保我们的技术栈能够顺利运行 Redis 与
因为我们在前面已经花了大量的时间来学习lua,所以我们在本节就会结束xlua的部分。2.3更轻量的by value方式:映射到dictionary<>,list<>。不想定义class或者interface的话,我们可以考虑用这个,前提table下key和value的类型都是一致的。Dictionary<string, object> dict = luaenv
转载
2024-05-17 16:25:05
92阅读
在Lua中可以通过自定义类型的方式与C语言代码更高效、更灵活的交互。这里我们通过一个简单完整的示例来学习一下Lua中userdata的使用方式。需要说明的是,该示例完全来自于Programming in Lua。其功能是用C程序实现一个Lua的布尔数组,以提供程序的执行效率。见下面的代码和关键性注释。#include
#include
#include
#include
#define B
转载
2024-03-25 10:04:26
98阅读
脑子不好,老忘,只能写下来。
关键字
and break do else elseif
end false for function if
in local nil not or
repeat return then true until while
变量和操作符
1、lua支持以下几种变量类型
print(type("string")) string
pr
转载
2024-05-14 10:26:32
38阅读