添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
最近想做个工具来做一些lua代码检测,比如统计某函数体里的a函数的调用次数,调用绑定事件后是否有把其返回值在某退出函数里解绑定,或者某函数调用的参数是不是和协议文档里的有对应上(这个还是建议直接从协议文档生成lua代码的好).
大学时就用正则表达式做过java代码的解析了,这次想换个实现姿势,也想弄个通用点的,大致想法就是提取lua代码中的函数体和表达式信息,并转化成一些字符串列表方便查询。比如把一个函数调用拆成函数名、参数列表和返回值列表几个部分。还好lua是开源,干脆就从它的语法解析器下手,大部分工作它都做好了,我们只需要在某个时机把字符串保存下来。
为了方便查询、扩展结构和好看的打印,所以我用json格式存放解析后的信息。
表达式有好多类型,比如函数调用、赋值、判断语句等,暂时只需要用到函数调用的,以后有空再实现其它类型吧。
比如传入lua代码:
function func1()
	local result_val = self:func2("arge")
end
将生成json代码: "func_name": "func1" 最近想做个工具来做一些lua代码检测,比如统计某函数体里的a函数的调用次数,调用绑定事件后是否有把其返回值在某退出函数里解绑定,或者某函数调用的参数是不是和协议文档里的有对应上(这个还是建议直接从协议文档生成lua代码的好).大学时就用正则表达式做过java代码的解析了,这次想换个实现姿势,也想弄个通用点的,大致想法就是提取lua代码中的函数体和表达式信息,并转化成一些字符串列表方便查询。比如把一...
config. lua print('--In Lua --')local a = -10 print('--math.abs(a)--',math.abs(a))width = 1080 height = 720name = "iphone" numStr = 12345function test1() print('--function test1--') endfunction test2(
1.脚本不要大写大写字母或者下划线开头做变量,因为它们被用来做保留字(环境变量啥的)。 2.变量的创建,直接使用一个变量即可,不存在就创建,没有赋 就认为变量的 为nil。删除一个全局变量,将其 为nil,即一个变量是否存在看其 是否为nil。nil在用来作比较时,应该加上双引号”nil”如 type(x)==”nil”,type(type(X))==string 3.对一个数字字符串进...
2、第一种获取方法:通过GetFunction方法获取 Lua Function function = Lua Mgr.GetInstance(). Lua State.GetFunction("testFun"); // 调用 function.Call(); 3、第二种方法:通过[ 函数
通过 调用 含有一个内部 函数 加上该外部 函数 持有的外部局部变量(upvalue)的外部 函数 (就是工厂)产生的一个实例 函数 外部 函数 +外部 函数 创建的upvalue+内部 函数 (闭包 函数 ) function test() local Test=0 return function()--//尾 调用 Test =Test + 1 return Test
主要利用到 lua 中的debug库中的getinfo方法。 在使用该方法之前,先了解一下 lua 中栈层的概念。一个栈层是一个数字,它表示某一时刻某个活动的 函数 ,即一个正在 调用 还未 返回 函数 调用 调试库的 函数 是层1, 调用 这个 函数 函数 是层2。 debug.getinfo(function[,what])  第一个 参数 是一个 函数 或是栈层, 返回 是一个table,关于该 函数 或该栈层上 函数 的相关 信息 ,来看
对于 Lua 调用 Mosquitto库,需要使用 Lua 的C API进行封装,然后通过 Lua 脚本进行 调用 。Mosquitto库提供了一些 函数 ,其中mosquitto.new 函数 用于创建一个Mosquitto客户端实例。下面是该 函数 的详细解释: 函数 原型: struct mosquitto *mosquitto_new(const char *id, bool clean_session, void *userdata) 函数 参数 : - id:字符串类型,表示客户端标识符,如果id为NULL,则Mosquitto库将自动为客户端生成一个唯一的标识符。 - clean_session:布尔类型,表示是否启用清除会话功能。如果设置为true,则在客户端断开连接时,Mosquitto服务器将删除与客户端相关的所有 信息 。如果设置为false,则在客户端断开连接时,Mosquitto服务器将保留与客户端相关的 信息 ,以便客户端重新连接。 - userdata:指针类型,表示用户数据,可以传递任何类型的数据,Mosquitto库不会对其进行处理,只是简单地将其传递给回调 函数 ,以便用户在回调 函数 中使用。 函数 返回 : - 成功: 返回 一个指向mosquitto结构体的指针,表示创建的Mosquitto客户端实例。 - 失败: 返回 NULL,表示创建失败。 示例 代码 : #include <mosquitto.h> #include <stdio.h> int main(int argc, char *argv[]) struct mosquitto *mosq = NULL; mosq = mosquitto_new("client1", true, NULL); if(mosq){ printf("Mosquitto client created successfully.\n"); mosquitto_destroy(mosq); }else{ printf("Failed to create Mosquitto client.\n"); return 0; 在上面的示例 代码 中,我们创建了一个名为client1的Mosquitto客户端实例,并启用了清除会话功能。如果创建成功,则打印“Mosquitto client created successfully.”,否则打印“Failed to create Mosquitto client.”。最后,我们使用mosquitto_destroy 函数 销毁Mosquitto客户端实例,释放内存。
static public UnityEngine.Object GUIDToObject(string guid) if (string.IsNullOrEmpty(guid)) return null; if (s_GetInstanceIDFromGUID == null) s_GetInstanceIDFromGUID = typeof(AssetDatabase).GetMethod("GetInstanceIDFromGUID", BindingFlags.Static | BindingFlags.NonPublic); //s_GetInstanceIDFromGUID为null 怎么解决啊 int id = (int)s_GetInstanceIDFromGUID.Invoke(null, new object[] { guid }); if (id != 0) return EditorUtility.InstanceIDToObject(id); string path = AssetDatabase.GUIDToAssetPath(guid); if (string.IsNullOrEmpty(path)) return null; return AssetDatabase.LoadAssetAtPath(path, typeof(UnityEngine.Object)); 在windows上编译PC和Android平台的xlua库(并加入第三方lua库lpeg,sproto,lua-crypt) 一弈尘一: 折腾半天把sproto编译进去了,顺便说一下他这个安卓编译用的ndk-r10e,用别的版本可能会有各种问题。 现在就是云风那个lua-crypt,看起来要自己改一下,我看了下他代码的函数都没有extern,在外面拿不到吧 在windows上编译PC和Android平台的xlua库(并加入第三方lua库lpeg,sproto,lua-crypt) 一弈尘一: 原来要关掉代理。。 在windows上编译PC和Android平台的xlua库(并加入第三方lua库lpeg,sproto,lua-crypt) 一弈尘一: 新版本Android Studio不提供cmake下载了,蛋疼