f = loadstring("i=i+1")基本等价于f = function() i=i+1 end但是第二段代码比第一段代码要快得多,因为它只在编译对应程序块时被编译一次,而第一段代码却在每次调用loadstring时都被编译,由于loadstring每次编译时不涉及词法域,所以上述两段代码并不等价,如下所示:i = 32local i = 0f = loadstring("i = i +
原创 2015-12-30 20:03:49
3456阅读
第 4 章 基本语法 Lua 像 C 和 PASCAL 几乎支持所有的传统语句:赋值语句、控制结构语句、函数调 用等,同时也支持非传统多变量赋值、局部变量声明。4.1 赋值口句赋值是改变一个变量值和改变表域最基本方法。a = "hello" .. "world" t.n = t.n + 1Lua 可以对多个变量同时赋值,变量列表和值列表各个元素用逗号分开,赋值语句右边
loadstring 不会有边界效应产生,他仅仅编译 chunk 成为自己内部实现一个匿名函数。通常对他误解是他们定义了函数。L
原创 2023-04-11 00:23:54
230阅读
之前去面试被问到好多次这个lua面向对象问题,正好看到这篇文章感觉写非常不错,元表概念Lua,面向对向是用元表这种机制来实现。元表是个很“道家”机制,很深遂,很强大,里面有一些基本概念比较难理解透彻。不过,只有完全理解了元表,才能对Lua面向对象使用自如,才能在写Lua代码高级语法时游刃有余。首先,一般来说,一个表和它元表是不同个体(不属于同一个表),在创建新table时,不会
该函数返回值是返回一个function,如果load失败,则返回nil例子代码:i = 32local i = 0f = loadstring("i = 1 + i; print(i)");g = function () i = 1 + i; print(i) endf()g()f操作全局i,g操作是局部i,因为,loadstring总是在全局环境中去编译它
原创 2023-08-25 14:14:35
950阅读
Lua 字节码进行加密由于 luajit 不支持 64 位,quick 新版本默认使用 lua 5.1.5 版本,并提供将 lua 源码打包成通用字节码工具 luac 。为了增强安全性, quick 提供了一个基本加密方案,使开发者可以对字节码作自定义加密,防止对字节码简单反编译工作。此方案配合原有的XXTEA加密方案,已经能够满足普通加密需要。如果开发者需要更高强度加密,可以与我
转载 2024-03-08 20:30:48
159阅读
ok,前面准备给一个dll写wrapper,写了篇日志,看似写比较明白了,但是其实有很多米有弄明白。比如PIL中使用element,key,tname,field这些,还是比较容易混淆。今天正好搞搞清楚。1、stack这个应该不用多讲了,C和lua交互就是基于一个stack,而且每次lua调用一个c函数,都是给分配一个新stack。它原型: typedef int (*lua_
Lua,函数是对语句和表达式进行抽象主要方法。既可以用来处理一些特殊工作,也可以用来计算一些值。Lua 提供了许多内建函数,你可以很方便在程序调用它们,如print()函数可以将传入参数打印在控制台上。Lua 函数主要有两种用途:1.完成指定任务,这种情况下函数作为调用语句使用;2.计算并返回值,这种情况下函数作为赋值语句表达式使用。函数定义Lua 编程语言函数定义格式如下:o
介绍安装luarocks语法注释标示符关键字全局变量数据类型变量赋值索引循环流程控制函数可变参数运算符一元运算符,返回字符串或表长度。 #”Hello” 返回 5字符串迭代器泛型 for 迭代器无状态迭代器多状态迭代器table模块与包require 函数加载机制C 包元表(Metatable)元方法协同程序(coroutine)线程和协同程序区别基本语法生产者-消费者问题文件I/
转载 2024-05-21 16:30:31
61阅读
  郁闷,只要边边修改,最后测试成功,整理一个完整资料发表下。再次感谢“雪明”与一个不知名网友文章,不知道原作者,也就不发链接了。如何编译1.       下载首先到官方网站下载: http://www.luaplus.org/下载这个: All source code: http://luaplus.org/LuaPlus
去官网下载lua最新版本:www.lua.orgLua由三部分组成,即  * Lua链接库  * Lua解释器  * Lua编译器因此,对于Lua源代码编译主要就是编译Lua链接库、Lua解释器和Lua编译器。编译Lua链接库使用Visual Studio 2012创建一个VC++项目,项目命名为Lua53,项目类型为静态库、不设置预编译头。删除Visual S
转载 2024-04-15 11:53:33
45阅读
先看例子:do local errorInfo = loadfile("test.lua"); --load code file if(errorInfo == nil) then print("load file failed"); else print("load file success"); local doInfo = dofile("test.lua") --co
原创 2023-08-25 14:14:52
218阅读
LoadString 从资源载入字符串,我们一般这么用。
转载 2010-08-05 21:23:00
219阅读
WinAPI: LoadString - 从资源载入字符串 //声明: LoadString( hInstance: HINST; {EXE 或 DLL 句柄} uID: UINT; {资源 ID} lpBuffer: PChar; {缓冲区} nBuffe
原创 2021-04-30 13:37:15
511阅读
对字符串来说,#取字符串长度,但对于table需要注意。luatable可以用数字或字符串等作为key, #号得到是用整数作为索引最开始连续部分大小, 如果t[1] == nil, 即使t[5], t[6], t[7]是存在,#t仍然为零。对于这类tb[1],tb[2]....才能获取到正确长度。local tab = {}tab[1] = 1tab[2] = 2tab[3] = nilprint(#tab)--结果为2如果table第一个元素key为非数字,那么#t
原创 2022-11-29 20:07:59
148阅读
之前一直没理清lua_gettable和lua_settable使用,今天理清了,顺便就做下笔记了。 1.lua_gettable void lua_gettable (lua_State *L, int index);把t[k] 值压入堆栈,这里 t 是指有效索引 index 指向值,而 k 则是栈顶放值。这个函数会
转载 2024-06-13 20:41:56
248阅读
Lua 对字符串来说, 取字符串长度,但对于table需要注意。 luatable可以用数字或字符串等作为key, 号得到是用整数作为索引最开始连续部分大小, 如果t[1] == nil, 即使t[5], t[6], t[7]是存在, t仍然为零。对于这类tb[1],tb[2]...
原创 2021-07-20 16:56:49
489阅读
在很多语言中都有闭包概念,而在这里,我将主要对Lua语言闭包概念进行分析与总结。希望对大家学习Lua有帮助。什么是闭包?闭包在Lua是一个非常重要概念,闭包是由函数和与其相关引用环境组合而成实体。我们再来看一段代码:function newCounter() local i = 0 return function () -- 匿名函数 i = i
转载 2024-06-07 14:58:03
36阅读
这里主要写Lua字符串TString相关结构和算法。文章没有贴Lua源码,只画出了结构图,和算法伪代码。这样阅读起来更加直观。一、TString概述 1、lua字符串是常量,例s = s .. 1 创建了一个新字符串赋值给s,并不是改变了s字符串数据。 2、lua字符串分为长字符串和短字符串。 长字符串和短字符串区别 (1)存储方式: 短字符串:全局存储一份 长字符串:多份 (
转载 2024-03-22 11:02:25
210阅读
1、什么是元表 table是lua中一个重要数据结构,我们可以访问table内值,但是却无法对两个table进行操作。因此lua提供了元表(Metatable),允许我们改变table行为,每个行为关联了对应元方法。 元表就类似于C++运算符重载,可以对类对象进行操作,当然元表功能更强大一些。有两个很重要函数来处理元表: setmetatable(table,metatabl
转载 2024-04-25 10:46:01
178阅读
  • 1
  • 2
  • 3
  • 4
  • 5