【懒人精灵】闭包类模块的实现和调用,全分辨率脚本的应用

在 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

解释:

  1. SingletonModule 是类模块,它包含了一个私有的 instance 变量用于保存单例实例。
  2. SingletonModule.new() 方法是构造函数(初始化函数),在初始化时检查 instance 是否已经存在。如果已经存在,则返回已有的实例;如果不存在,则创建新的实例并进行初始化。
  3. 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 (证明是同一个实例)

说明:

  1. 第一次调用 SingletonModule.new() 时,模块会被初始化,创建一个实例。
  2. 之后每次调用 SingletonModule.new(),都会返回同一个实例 instance,即使是在不同的变量中,数据是共享的。
  3. instance1instance2 中修改的数据是同步的,因为它们指向同一个实例。

总结:

通过这种方式,我们可以确保 SingletonModule 只会初始化一次,后续的调用直接返回相同的实例,这对于需要全局共享状态或者资源的模块非常有效。

应用场景

以全分辨率脚本为例,由于涉及到分辨率的转换,可以将找图、找色、找字等方法,封装到独立的模块里。

调用模块的时候,将开发分辨率和当前屏幕的真实分辨率作为参数进行模块的初始化。

file

1. 官方交流QQ群,添加多个不批。建议使用安卓手机或电脑申请。
飞云脚本圈: 586333520飞云脚本圈
Auto.js学习交流③群:286635606
Auto.js学习交流②群:712194666(满员)
IOS免越狱自动化测试群:691997586
2. 盗版,破解有损他人权益和违法作为,请各位会员支持正版。
3. 本站部分资源来源于用户上传和网络搜集,如有侵权请提供版权证明并联系站长删除。
4.如未特别申明,本站的技术性文章均为原创,未经授权,禁止转载/搬运等侵权行为。
5.全站所有付费服务均为虚拟商品,购买后自动发货。售出后概不接受任何理由的退、换。注册即为接受此条款。
6.如果站内内容侵犯了您的权益,请联系站长删除。
飞云脚本 » 【懒人精灵】闭包类模块的实现和调用,全分辨率脚本的应用

企业级大数据智能营销管理系统

了解详情