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

相关文章

Lua 脚本在 Redis 中执行时的原子性以及与redis的事务的区别

在 Redis 中,Lua 脚本具有原子性是因为 Redis 保证在执行脚本时,脚本中的所有操作都会被当作一个不可分割的整体。具体来说,Redis 使用单线程的执行模型来处理命令,因此当 Lua 脚本在 Redis 中执行时,不会有其他命令打断脚本的执行过程。脚本中的所有操作都将连续执行,直到脚本执行完成后,Redis 才会继续处理其他客户端的请求。 Lua 脚本在 Redis 中原子性的原因

由Lua 粘合的Nginx生态环境

转自:http://blog-zq-org.qiniucdn.com/pyblosxom/oss/openresty-intro-2012-03-06-01-13.html -- agentzh tech-club.org 演讲听录 免责聲明 Lua 粘合的 Nginx 生态环境 2.1. openresty 2.2. 配置小语言 2.3. ngx_drizzle 2.4.

C语言程序设计(数据类型、运算符与表达式)

一、C的数据类型 C语言提供的数据类型: 二、常量和变量 2.1常量和符号常量 在程序运行过程中,其值不能被改变的量称为常量。 常量区分为不同的类型: 程序中用#define(预处理器指令)命令行定义变量将代表常量,用一个标识符代表一个常量,称为符合常量。 2.2变量 变量代表内存中具有特定属性的一个存储单元,用来存放数据,在程序运行期间,这些值是可以 改变的。 变

C语言程序设计(选择结构程序设计)

一、关系运算符和关系表达式 1.1关系运算符及其优先次序 ①<(小于) ②<=(小于或等于) ③>(大于) ④>=(大于或等于 ) ⑤==(等于) ⑥!=(不等于) 说明: 前4个优先级相同,后2个优先级相同,关系运算符的优先级低于算术运算符,关系运算符的优先级高于赋值运算符 1.2关系表达式 用关系运算符将两个表达式(可以是算术表达式或关系表达式,逻辑表达式,赋值表达式,字符

Debugging Lua Project created in Cocos Code IDE creates “Waiting for debugger to connect” in Win-7

转自 I Installed Cocos Code IDE and created a new Lua Project. When Debugging the Project(F11) the game window pops up and gives me the message waiting for debugger to connect and then freezes. Also a

智能工厂程序设计 之1 智能工厂都本俱的方面(Facet,Aspect和Respect)即智能依赖的基底Substrate 之1

Q1、昨天分别给出了三个智能工厂的 “面face”(里面inter-face,外面outer-face和表面surface) 以及每个“面face” 各自使用的“方”(StringProcessor,CaseFilter和ModeAdapter)  。今天我们将继续说说三个智能工厂的“方面” 。在展开之前先看一下三个单词:面向facing,取向oriented,朝向toword。理解这三个词 和

Docker+FastDFS+Lua搭建文件服务器进阶版

使用FastDFS+Nginx+Lua+GraphicsMagick搭建类似淘宝的图片服务器 1、FastDFS安装1.1、镜像下载1.2、开启tracker容器1.3、开启storage容器1.4、测试 2、FastDFS集成Nginx+lua+GraphicsMagick2.1、依赖包下载2.2、安装软件基础包2.3、依赖安装2.4、配置Lua脚本实现图片缩略图2.5、修改nginx.c

C语言程序设计 笔记代码梳理 重制版

前言 本篇以笔记为主的C语言详解,全篇一共十章内容,会持续更新基础内容,争取做到更详细。多一句没有,少一句不行!  形而上学者谓之道,形而下学者谓之器 形而上学者谓之道,形而下学者谓之器 第1章 C语言的流程 1.C程序经历的六个阶段 编辑(Edit)预处理(Preprocess)编译(Compile)汇编(Assemble)链接(Link)执行(Execute)  2.

ACM东北地区程序设计大赛

不得不说随着参赛级别的提高,题目真的是越来越难啊,不过队长真是给力啊,在我们三个共同努力之下拿下了地区赛三等奖,哈哈我们可是大一唯一一只获奖队,终于在这次比赛打败了田大神。。。大神是失手了,俺和他差距还是挺大的。。。队友陈彤马上要去服兵役了,他说这是我们送给他最好的离别礼物,希望那家伙在部队好好干,以后谁干揍我!!!东北地区赛结束后,今年已经估计没机会参加亚洲区比赛了,赶紧补高数和线数啊!!别挂了

【Unity-Lua】音乐播放器循环滚动播放音乐名

前言:Unity中UI节点 图1 如上所示,一开始本来是打算用ScrollView做的,觉得直接计算对应的文本位置就行,所以没用ScrollRect来做,可以忽略Scroll,Viewport这些名字。如下图:需要在一个背景Image组件上添加上Mask组件来显示固定位置的文本显示。 图2 图3 并且需要在要显示的文本上挂载Content Size Filter组件,但是这儿会有个坑