Lua程序设计(五十八)

2024-03-04 06:32
文章标签 lua 程序设计 五十八

本文主要是介绍Lua程序设计(五十八),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

记忆技术(memorization technique)还可以用来确保某类对象的唯一性。例如,假设一个系统用具有三个相同取值范围的字段red、green和blue的表来表示颜色,一个简单的颜色工厂函数每被调用一次就生成一个新颜色:

function createRGB (r, g, b)return {red = r, green = g, blue  = b}
end

使用记忆技术,我们就可以为相同的颜色复用相同的表。要为每一种颜色创建一个唯一的键,只需要使用分隔符把颜色的索引连接起来即可:

local results = {}
setmetatable(results, {__mode = "v})
function createRGB(r, g, b)local key = string.format("%d-%d-%d", r, g, b)local color = results[key]if color == nil thencolor = {red = r, green = g, blue = b}results[key] = colorendreturn color
end

这种实现的一个有趣结果就是,由于两种同时存在的颜色必定是由同一个表来表示,所以用户可以使用基本的相等符比较两种颜色。因为随着时间的迁移垃圾收集器会清理表results, 所以一种指定的颜色在不同的时间内可能由不同的表来表示。不过,只要一种颜色正在被使用,它就不会从results表中被移除。因此,一种颜色与一种新颜色相比已经存在了多长时间,这种颜色对应的表也存在了对应长度的时间,也可以被新颜色复用。

对象属性

弱引用表的另外一种重要应用就是将属性与对象关联起来。

当对象是一个表时,可以通过适当的唯一键把属性存储在这个表自身中。不过,如果对象不是一个表,那么它就不能保存自己的属性。另外,即使是表,有时我们也不想把属性保存在原始的对象中。

外部表为对象和属性的映射提供了一种理想的方法即对偶表示。其中将对象用作键,将对象的属性用作值,

这种方案却有一个缺陷:一旦我们把一个对象当做表中的一个键,那么就是引用了它。Lua语言无法回收一个正在被用作建的对象。例如,如果使用一个普通的表来映射函数和函数名,那么这些函数就永远无法被回收。

这篇关于Lua程序设计(五十八)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/772284

相关文章

Javascript高级程序设计(第四版)--学习记录之变量、内存

原始值与引用值 原始值:简单的数据即基础数据类型,按值访问。 引用值:由多个值构成的对象即复杂数据类型,按引用访问。 动态属性 对于引用值而言,可以随时添加、修改和删除其属性和方法。 let person = new Object();person.name = 'Jason';person.age = 42;console.log(person.name,person.age);//'J

Redis-在springboot环境下执行lua脚本

文章目录 1、什么lua2、创建SpringBoot工程3、引入相关依赖4、创建LUA脚本5、创建配置类6、创建启动类7、创建测试类 1、什么lua “Lua”的英文全称是“Lightweight Userdata Abstraction Layer”,意思是“轻量级用户数据抽象层”。 2、创建SpringBoot工程 3、引入相关依赖 <?xml version

MapReduce程序设计2

要求 1、数据集stock-daily,包含A股近4000只股票的今年以来的日数据;数据集stock-daily-30d仅包含最近30个交易日数据,根据自己计算机性能选择。 数据来源:https://www.joinquant.com/help/api/help?name=JQData 2、数据集stock-concept,包含A股近4000只股票所有的股票代码、名称和概念。 数据来源:万

五十八周:文献阅读

目录 摘要 Abstract 文献阅读:使用 Transformer 进行长期预测-PatchTST 一、现有问题 二、提出方法 三、相关知识 1、Patch 2、Vanilla Transformer 四、提出的方法 1、模型结构 2、表征学习 3、模型优点 五、研究实验 1、数据集 2、评估指标 3、基线模型 4、实验过程 5、实验结果 六、代码实现 七

java 程序设计 第九章对象和类

目录 9.1 引言 9.2 为对象定义类 9.3 示例:创建类和定义对象 9.4 使用构造方法构造对象 9.5 通过引用变量访问变量 9.6 使用Java中的类 9.7 静态变量、常量和方法 9.8 可见性修饰符  9.9 数据域封装 9.10 向方法传递对象参数 9.11 对象数组 9.12 不可变对象和类 9.13 变量的作用域 9.14 this引用 9.1

Windows程序设计课程作业-3(文件并发下载)

目录 目录 1.作业内容 2.作业要求 3.主要思路  1)窗体和组件初始化  2)下载管理器实例化 3)按钮点击事件处理 4)窗体加载事件处理  5)下载消息处理  4.主要难点 1)多线程管理: 2) UI更新: 3) 错误处理: 4) 资源管理: 5) 用户体验: 5.不足及改进 参考:  6.代码展示 代码仓库  7.运行结果 ​​​​​ 1.

Nginx 配置access_by_lua返回状态码和参数

1、介绍 access_by_lua是nginx权限访问控制的一个模块,通过配置相关参数可以达到访问应用权限控制的目的 2、示例 ngx.header.content_type = "application/json;charset=utf8" 控制返回数据的类型ngx.say用来返回数据ngx.exit退出并返回状态码 location ~*\/api/v4/(objects|warni

Lua 学习笔记(二) —— Scite 的配置文件讲解

首先将SciTEGlobal.properties文件里的全部内容复制粘贴到SciTEUser.properties文件中,我们修改的地方均是SciTEUser.properties文件。不过,本文主要是具体讲解这些配置语句的具体作用,基本不修改。 #SciTEGlobal.properties ——全局配置文件,一般不去改动; #SciTEUser.properties ——用户配置文件,

Lua 学习笔记(一) ——入门

在这篇文章中,我想向大家介绍如何进行Lua程序设计。我假设大家都学过至少一门编程语言,比如Basic或C,特别是C。因为Lua的最大用途是在宿主程序中作为脚本使用的。   Lua 的语法比较简单,学习起来也比较省力,但功能却并不弱。   在Lua中,一切都是变量,除了关键字。请记住这句话。 I. 首先是注释   写一个程序,总是少不了注释的。   在Lua中,你可以使用单行注释和多行注释。

lua表引用

初学lua容易遇到复制lua表这个问题; local test_a = { x = 10, y = 20} local test_b = test_a print(test_b.x) test_a.x = 100 print(test_b.x) test_b.x = 1000 print(test_a.x) -- 上面表示,test_a 传的 "