在 Lua 中,可以使用 闭包 来实现一个只需要初始化一次的类模块。
为了确保初始化只发生一次,我们可以创建一个单例(Singleton)模式。
这种模式可以确保该模块只被初始化一次,后续的调用将使用已初始化的实例。
单例模式的类模块
-- SingletonModule.lua
local SingletonModule = {}
SingletonModule.__index = SingletonModule
-- 用来保存单例实例
local instance = nil
-- 初始化方法(构造函数)
function SingletonModule.new()
if instance then
-- 如果实例已经存在,直接返回实例
return instance
end
-- 创建新的实例
local self = setmetatable({}, SingletonModule)
-- 在这里进行初始化操作
self.data = "Hello, World!"
-- 保存实例
instance = self
return self
end
-- 示例方法
function SingletonModule:getData()
return self.data
end
function SingletonModule:setData(value)
self.data = value
end
-- 返回模块
return SingletonModule
解释:
SingletonModule
是类模块,它包含了一个私有的instance
变量用于保存单例实例。SingletonModule.new()
方法是构造函数(初始化函数),在初始化时检查instance
是否已经存在。如果已经存在,则返回已有的实例;如果不存在,则创建新的实例并进行初始化。getData()
和setData()
方法是模块提供的示例方法,展示如何访问和修改实例的数据。
外部调用
在外部调用这个模块时,第一次会初始化模块,后续则直接使用已初始化的实例。
-- main.lua
local SingletonModule = require("SingletonModule")
-- 第一次调用会初始化模块
local instance1 = SingletonModule.new()
print(instance1:getData()) -- 输出: Hello, World!
-- 修改数据
instance1:setData("New Value")
-- 再次获取实例,确保数据保持一致
local instance2 = SingletonModule.new()
print(instance2:getData()) -- 输出: New Value (即使是不同的引用,数据是共享的)
-- 检查实例是否相同
print(instance1 == instance2) -- 输出: true (证明是同一个实例)
说明:
- 第一次调用
SingletonModule.new()
时,模块会被初始化,创建一个实例。 - 之后每次调用
SingletonModule.new()
,都会返回同一个实例instance
,即使是在不同的变量中,数据是共享的。 - 在
instance1
和instance2
中修改的数据是同步的,因为它们指向同一个实例。
总结:
通过这种方式,我们可以确保 SingletonModule
只会初始化一次,后续的调用直接返回相同的实例,这对于需要全局共享状态或者资源的模块非常有效。
应用场景
以全分辨率脚本为例,由于涉及到分辨率的转换,可以将找图、找色、找字等方法,封装到独立的模块里。
调用模块的时候,将开发分辨率和当前屏幕的真实分辨率作为参数进行模块的初始化。
1. 官方交流QQ群,添加多个不批。建议使用安卓手机或电脑申请。
飞云脚本圈: 586333520
Auto.js学习交流③群:286635606
Auto.js学习交流②群:712194666(满员)
IOS免越狱自动化测试群:691997586
2. 盗版,破解有损他人权益和违法作为,请各位会员支持正版。
3. 本站部分资源来源于用户上传和网络搜集,如有侵权请提供版权证明并联系站长删除。
4.如未特别申明,本站的技术性文章均为原创,未经授权,禁止转载/搬运等侵权行为。
5.全站所有付费服务均为虚拟商品,购买后自动发货。售出后概不接受任何理由的退、换。注册即为接受此条款。
6.如果站内内容侵犯了您的权益,请联系站长删除。
飞云脚本 » 【懒人精灵】闭包类模块的实现和调用,全分辨率脚本的应用
飞云脚本圈: 586333520
Auto.js学习交流③群:286635606
Auto.js学习交流②群:712194666(满员)
IOS免越狱自动化测试群:691997586
2. 盗版,破解有损他人权益和违法作为,请各位会员支持正版。
3. 本站部分资源来源于用户上传和网络搜集,如有侵权请提供版权证明并联系站长删除。
4.如未特别申明,本站的技术性文章均为原创,未经授权,禁止转载/搬运等侵权行为。
5.全站所有付费服务均为虚拟商品,购买后自动发货。售出后概不接受任何理由的退、换。注册即为接受此条款。
6.如果站内内容侵犯了您的权益,请联系站长删除。
飞云脚本 » 【懒人精灵】闭包类模块的实现和调用,全分辨率脚本的应用