我们之前实现了自己版本的require,首先认定为lua模块尝试加载,如果加载不成功则认定为C模块继续进行加载。实际上,在Lua内部,是通过searchers来区分不同的加载方式。Lua一共有4种searchers,用来加载lua模块的和加载C模块的分别是第2个和第3个。第1个searcher叫做preload,它使用package.preload这个内部table,根据加载模块的名称,去找到对应
转载
2024-02-17 20:35:29
79阅读
第 14 章 Packages 很多语言专门提供了某种机制组织全局变量的命名,比如 Modula 的 modules,Java 和 Perl 的 packages,C++的 namespaces。每一种机制对在 package 中声明的元素的可见性以及其他一些细节的使用都有不同的规则。但是他们都提供了一种避免不同库中命名冲突的
转载
2024-04-05 13:45:54
109阅读
runbase Framwork用pack和unpack来保存用户上次操作的值,用户上次操作的值会存在SysLastValue表中,这个功能确实蛮酷,不过今天差点被这个东西给整死,在我机子运行上的好好的代码,弄到客户那边去死活run不起来,Application和DataBase都是一样的,认真地跟踪了一遍代码才知道,原来是由于我开发的机子是两层的,客户的环境是三层造成的,太大意了......两层
最近在学Lua 一直对模块与包的使用有很多不明白的地方,有的引用使用. 有的引用使用: 到底都是怎么个情况呢?今天下午要搞定!一个包就是模块的集合:A Package is a collection of modules.可以使用require和module函数来分别引用和创建Lua中的模块,调用模块内函数的简单方法:require "mod"
mod.foo()如果模块名太长,可以设置一个loc
转载
2024-06-05 12:03:07
77阅读
Lua如何管理”package” 方式一: 私有方法和变量都需要显式定义为local类型的,这很容易造成错误。一旦不小心漏写,就又将方法定义为全局的了。 ”package”中方法和变量的定义都需要加上”package”名字前缀。 方式二: 优化了”package”中方法的定义方式,使得无论是公有还是
转载
2017-10-28 13:49:00
163阅读
require (modname)加载一个模块。 这个函数首先查找 package.loaded 表, 检测 modname 是否被加载过。 如果被加载过,require 返回 package.loaded[modname] 中保存的值。 否则,它试着为模块寻找 加载器 。 require 遵循 package.searchers 序列的指引来查找加载器。 如果改变这个序列,我们可以改变 requ
转载
2024-05-25 20:31:58
26阅读
热重载,就是不重新开unity让代码的变化直接看出来,一般在开发时候使用lua中通过require导入的文件,最终都存在package.loaded这个table中。require会判断是否文件已经加载避免重复加载同一文件所以需要先把package.loaded中对应的内容置空,然后再重新导入for key,val in pairs(package.loaded) do
print(ke
转载
2023-07-18 22:09:51
262阅读
1.脚本载入上,loadfile、dofile、require是比较常用的,具体区别网上有些博文已经写的很好了,这里简单概括:(1)loadfile编译代码成中间码并且返回编译后的chunk作为一个函数,而不执行代码。一次编译的返回结果可以多次被运行。(2)dofile读入代码文件并编译执行。每调用dofile一次,都会重新编译执行一次。(3)require比较接近dofile,但require会
转载
2024-04-20 11:26:26
45阅读
包库为Lua提供简易的加载及创建模块的方法,由require、module方法及package表组成
1、module (name [, ···])
功能:建立一个模块。
当package.loaded[name]中存在时,当中的表作为module;
当在全局表中存在name指定的表时,此表作为module;
当以前两种情况都不存表name时,
转载
2024-05-18 11:51:14
72阅读
LUA中关于Package定义学习笔记是本文要介绍的内容,主要是来学习lua中对Package,具体内容俩看本文详解。Package是个很逻辑的概念。也就是说很可能不是语言直接提供的设施。cpp里的namespace可以用来实现package,在LUA中则是依靠table机制来实现。实现的方式大同小异,本文总结了在《lua中文手册》中出现的3种方式。方式一: 直接将所有组成包的数据和方法定义在包中
转载
2024-03-27 20:33:31
143阅读
一、Lua模块与包
从开发人员的角度来看,一个模块就是一个程序库,具体的引用可以通过require来加载。然后便得到一个变量,表示一个table类型。这个table有点像一个命名空间,其内容就是模块中导出的所有东西,例如函数or常量等等。一个标准的模块还应是require返回这个table
1、require函数
要加载一个模块,只需简单调用require "模块名"。此调用会返回
转载
2024-04-29 12:42:07
160阅读
如果你看了LUA的文档,那么就应该很清楚LUA与C交互数据时都是用到LUA中所谓的stack。那么当我调用lua_open函数之后栈是什么样的呢?空的(luaopen_base等会往栈上加进一些东西)。那么至于如何操作栈上的数据,我想官方文档上已经说得很清楚了,不过最初我对于栈的顺序有一些迷糊,所以就说说这个。现在假如我有如下的一段代码: 代码:lua_State* L = lua_op
模块与包 使用require加载模块 一个规范的模块应该返回一个table作为这个模块所有导出功能的集合 lua里没通过任何强制性语法规则要求创建模块时反回一个table 但最好这么做,因为大多lua的模块都是这么发布的--require的实现源代码 function require(name) 
转载
2024-05-11 20:45:00
77阅读
package.cpath()require 用于搜索 C 加载程序的路径。 Lua 使用环境变量 LUA_CPATH 或 luaconf.h 中定义的默认路径,以与初始化 Lua 路径 package.path 相同的方式初始化 C 路径 package.cpath。 package.loaded()require 用来控制哪些模块已经加载的表。 当你需要一个模块 modname 并且 pack
转载
2024-03-25 08:21:34
633阅读
用require函数只能加载一次,因为它的特性是: 1、require函数会搜索目录加载文件 2、require会判断是否文件已经加载避免重复加载同一文件。 而这个特性二,虽然我们可能知道这两个特性,但是潜意识里面常常把这个特性二给忽视掉了. 直到哪天我们需要反复加载同一个lua文件,但是没有实现自己想要效果的时候,才会发现这个特性二的存在感特别强!也许有的小伙伴,会有疑问,为什么要反复加载啊?
转载
2024-05-11 20:59:04
212阅读
--[[
- @desc lua数据输出
- @param string 字符串
- return string
--]]
function dump(v)
if not __dump then
function __dump(v, t, p)
local k = p or "";
if type(v)
转载
2024-09-06 19:22:13
268阅读
最近发现服务的逻辑完成时间很短,但是上游接收到的时间比较长,所以就怀疑是底层数据的序列化/反序列化、读写、传输有问题,然后怀疑是TCP的读写缓存是不是设置太小。现在就记录下TCP缓存的各配置项以及缓存大小的计算公式。1.有关发送、接收缓存的配置内核设置的套接字缓存/proc/sys/net/core/rmem_default,net.core.rmem_default,套接字接收缓存默认值 (bi
要实现Lua的热更新,首先要了解Lua的模块加载机制,热更新的核心就是替换package.loaded中的模块。加载规则:包管理库提供了从Lua中加载模块的基础库。只有一个导出函数直接放在全局环境中:require。所有其他的部分都导出在表package中。require(modname)查询全局缓存表package.loaded:这个函数首先查找package.loaded表,检测modname
转载
2024-01-17 06:11:19
83阅读
需要用lua写一个工具,c++调用lua,然后这个lua要require其他lua脚本,在主lua里面设置package.path,但一直都失败,甚至lua都无法编译通过。project_path = cpp_getProjectPath()
local path = project_path.."/?.lua;"
package.path = package.path ..";".. path
转载
2023-06-18 19:46:35
82阅读
模块需要通过函数require来加载,创建返回表。模块导出的所有如函数、常量作为一个工作空间。1、require函数require首先检查表package.loaded是否模块已经加载,如果已经加载,则返回对应的值。如果模块没有加载,require搜索模块名字对应的lua文件,搜索通过package.path来引导,如果找到文件,则使用loadfile加载,返回的结果是称为加载器的函数。如果没有找
转载
2024-04-25 12:40:43
280阅读