cls.__supers = cls.__supers or {} 第一次为哪一个值为什么

时间: 2024-04-12 17:33:35 浏览: 200
在 Lua 中,`cls.__supers = cls.__supers or {}` 这行代码的作用是创建一个表 `cls.__supers`,如果 `cls.__supers` 已经存在,则不会重新创建,而是直接使用已存在的表。 当第一次执行这行代码时,如果 `cls.__supers` 不存在,即为 `nil`,那么 `cls.__supers or {}` 的结果就是一个空表 `{}`。然后将这个空表赋值给 `cls.__supers`。这样就确保了 `cls.__supers` 变量始终指向一个表。 当之后再次执行这行代码时,如果 `cls.__supers` 已经存在(即不为 `nil`),则 `cls.__supers or {}` 的结果就是 `cls.__supers` 本身,不会重新创建新的表。 这种用法常见于创建或初始化某个变量,确保变量始终指向一个表,以便后续向其中添加元素或进行其他操作。
相关问题

function class(classname, ...) local cls = {__cname = classname} local supers = {...} for _, super in ipairs(supers) do local superType = type(super) assert(superType == "nil" or superType == "table" or superType == "function", string.format("class() - create class \"%s\" with invalid super class type \"%s\"", classname, superType)) --异常捕获 if superType == "function" then assert(cls.__create == nil, string.format("class() - create class \"%s\" with more than one creating function", classname)); -- if super is function, set it to __create cls.__create = super elseif superType == "table" then if super[".isclass"] then -- super is native class assert(cls.__create == nil, string.format("class() - create class \"%s\" with more than one creating function or native class", classname)); cls.__create = function() return super:create() end else -- super is pure lua class cls.__supers = cls.__supers or {} cls.__supers[#cls.__supers + 1] = super if not cls.super then -- set first super pure lua class as class.super cls.super = super end end else error(string.format("class() - create class \"%s\" with invalid super type", classname), 0) end end cls.__index = cls if not cls.__supers or #cls.__supers == 1 then setmetatable(cls, {__index = cls.super}) else setmetatable(cls, {__index = function(_, key) local supers = cls.__supers for i = 1, #supers do local super = supers[i] if super[key] then return super[key] end end end}) end if not cls.ctor then -- add default constructor cls.ctor = function() end end cls.new = function(...) local instance if cls.__create then instance = cls.__create(...) else instance = {} end setmetatableindex(instance, cls) instance.class = cls instance:ctor(...) return instance end cls.create = function(_, ...) return cls.new(...) end return cls end

这段代码是一个用于创建类的函数,它使用了Lua语言的元表(metatable)和面向对象的概念。这个函数接受一个类名和可选的父类作为参数,并返回一个表示该类的table。 首先,该函数创建了一个空的类table `cls`,并设置了一个成员变量`__cname`来存储类名。 然后,通过循环遍历传入的父类参数数组,对每个父类进行类型检查和处理。如果父类是一个函数,则将其赋值给`__create`成员变量,用于创建实例对象。如果父类是一个table,并且具有`.isclass`成员变量,说明它是一个原生类(native class),将其创建函数赋值给`__create`成员变量。否则,将父类添加到`__supers`数组中,并将第一个父类设置为当前类的`super`成员变量。 接下来,设置了类的元表`__index`为类自身。如果类没有多个父类或者只有一个父类时,将元表设置为`cls.super`,否则设置一个自定义的元方法,该元方法会在访问不存在的成员时,依次查找父类中对应的成员。 然后,检查类是否有构造函数`ctor`,如果没有,则添加一个空的默认构造函数。 接着,定义了一个用于创建实例对象的方法`new`,它根据存在与否的`__create`成员变量,选择调用父类的创建函数或直接创建一个空的table作为实例对象。然后,通过`setmetatableindex`函数设置实例对象的元表,使其可以访问到类中的成员。最后,将类信息和构造函数参数传递给构造函数`ctor`并返回实例对象。 最后,定义了一个别名方法`create`,用于创建实例对象。 整体上,这段代码是一个简单的Lua实现的类系统,可以用于创建类和实例化对象,并支持继承和多继承的特性。

setmetatable(cls, {__index = function(_, key) local supers = cls.__supers for i = 1, #supers do local super = supers[i] if super[key] then return super[key] end end end}),_和key回传入什么

在`setmetatable(cls, {__index = function(_, key) ... end})`这段代码中,`_`和`key`是函数的参数。 在Lua中,当使用`__index`元方法时,第一个参数(通常被命名为`self`)表示要访问元表的对象本身,而第二个参数(通常被命名为`key`)表示要访问的键值。 然而,在这段代码中,使用了一个匿名函数作为`__index`的值。匿名函数中的第一个参数通常被命名为`_`,用于表示当前函数的第一个参数,但在这里并没有使用它。而第二个参数则被命名为`key`,用于表示要访问的键值。 因此,在这段代码中,`_`和`key`分别表示当前函数的第一个参数(在这里没有使用)和要访问的键值。
阅读全文

相关推荐

docx

大家在看

recommend-type

北京及周边手机信令数据-wgs84坐标系-3.csv.rar

北京市及其周边地市手机信令数据,经纬度为wgs84坐标系,csv格式。时间为2022年3月
recommend-type

植被恢复能力估算python代码(KNDVI代码).zip

有人担心,植被生态系统的恢复力可能会受到全球范围内持续的人为气候和土地利用变化的负面影响。最近的几项研究基于卫星数据,采用不同的方法论设置,介绍了全球植被恢复力的趋势。在此,通过对数据集、时空预处理和恢复力估算方法进行系统比较,我们提出了一种方法,可避免以往研究结果中存在的不同偏差。尽管如此,我们发现在茂密的热带和高纬度北方森林中,无论选择哪种植被指数,利用光学卫星植被数据进行恢复力估算都普遍存在问题。然而,在中纬度的广大地区,特别是生物量密度较低的地区,使用几种光学植被指数可以可靠地估算出恢复力。我们推断,不同植被指数的复原力增减在空间上具有一致的全球模式,更多地区面临复原力下降的问题,尤其是在非洲、澳大利亚和中亚地区。Correction of kNDVI code in Export_Resilience_GEE.ipynb and Sample_TimeSeries_GEE.ipynb
recommend-type

基于遗传算法的机场延误航班起飞调度模型python源代码

本资源提供机场航班延误调度模型的实现代码,采用遗传算法进行求解。 文本说明:https://blog.csdn.net/qq_43627520/article/details/128652626?spm=1001.2014.3001.5502 本资源提供机场航班延误调度模型的实现代码,采用遗传算法进行求解。 文本说明:https://blog.csdn.net/qq_43627520/article/details/128652626?spm=1001.2014.3001.5502 本资源提供机场航班延误调度模型的实现代码,采用遗传算法进行求解。 文本说明:https://blog.csdn.net/qq_43627520/article/details/128652626?spm=1001.2014.3001.5502 本资源提供机场航班延误调度模型的实现代码,采用遗传算法进行求解。 文本说明:https://blog.csdn.net/qq_43627520/article/details/128652626?spm=1001.2014.3001.5502
recommend-type

波恩癫痫脑电5种类.zip

一共五类数据,每类子文件下100个片段。每个片段4097个采样点,包含预处理matab文件和生成的包括database.mat
recommend-type

python爬虫之天眼查模拟登录.zip

代码仅供参考学习~ 代码仅供参考学习~ 代码仅供参考学习~ 代码仅供参考学习~ 代码仅供参考学习~ 天眼查模拟登录 天眼查模拟登录是指通过爬虫脚本模拟用户在天眼查网站上进行登录,以方便执行需要登录权限的操作,如查看更多企业信息、导出数据等。 2. 实现目标: 使用Python编写爬虫脚本,模拟用户在天眼查网站上进行自动登录,获取登录后的页面信息

最新推荐

recommend-type

cmd脚本-bat批处理-RUN.zip

cmd脚本-bat批处理-RUN.zip
recommend-type

【数据库技术】MySQL数据类型详解:数值、日期/时间、字符串类型的应用与优化

内容概要:本文详细介绍了 MySQL 中的数据类型,将其分为数值、日期/时间和字符串三大类。数值类型涵盖从 TINYINT 到 BIGINT 的整数类型以及浮点数和 DECIMAL 类型,每种类型都有明确的存储大小和取值范围。日期/时间类型包括 DATE、TIME、YEAR、DATETIME 和 TIMESTAMP,适用于不同的日期和时间表达需求,其中 TIMESTAMP 具有自动更新特性。字符串类型则由 CHAR、VARCHAR、BLOB、TEXT、ENUM 和 SET 组成,能够存储固定长度或可变长度的字符及二进制数据。此外,还提及了空间数据类型,如 GEOMETRY 等,用于存储地理信息和几何图形数据。; 适合人群:数据库管理员、软件开发者及其他需要深入了解 MySQL 数据库设计与优化的专业人士。; 使用场景及目标:①为数据库设计提供理论依据,确保选择合适的数据类型以优化性能;②帮助开发者理解各种数据类型的特性和应用场景,以便更好地进行应用程序开发。; 其他说明:正确选择 MySQL 数据类型对于提高数据库效率至关重要,应根据实际需求合理选用不同类型。例如,在存储大量文本时,应考虑使用 TEXT 或 BLOB 类型;对于需要精确计算的数值,则优先选用 DECIMAL 类型。同时,了解每种类型的特点有助于避免潜在的数据丢失或溢出风险。
recommend-type

cmd脚本-bat批处理-去掉字符串头所有的0.zip

cmd脚本-bat批处理-去掉字符串头所有的0.zip
recommend-type

cmd脚本-bat批处理-全盘禁止运行指定程序.zip

cmd脚本-bat批处理-全盘禁止运行指定程序.zip
recommend-type

cmd-bat-批处理-脚本-语音参考字典.zip

cmd-bat-批处理-脚本-语音参考字典.zip
recommend-type

Hive用户指南:深入Java应用与管理

Hive是建立在Hadoop之上的数据仓库工具,它提供了一系列查询语言,这些语言能够简化对大数据集的查询和管理,尤其是对结构化数据的处理。Hive最初是由Facebook开发的,并在2012年被捐给了Apache软件基金会。由于其后端是基于Hadoop的,因此Hive擅长处理大量存储于HDFS(Hadoop分布式文件系统)中的数据。 Hive用户指南是指向Hive的入门、使用和管理等方面的官方文档。这份指南通常包含了对Hive架构的介绍,操作和查询语言HiveQL的详细语法和示例,以及如何优化查询和调优性能的最佳实践。 【标题】中提及的“Hive用户指南.zip”暗示了这份指南被压缩成ZIP文件格式,以方便用户下载、存储和传输。【描述】中简单的“Hive用户.zip”可能是一个简短的占位符或是标签错误,实际内容应该与标题保持一致,即指的是用户指南。 【标签】中的“java”可能表明Hive的某些版本或是其接口支持Java语言,或者该标签是指向Hive使用Java开发这一事实的提示。由于Hive基于Hadoop,而Hadoop是用Java编写的,因此Hive也与Java有着密切的关系。然而,实际上,Hive的客户端操作并不一定需要直接使用Java进行编程,用户可以通过多种方式与Hive交互,包括通过命令行、JDBC、ODBC或者Web界面等。 【压缩包子文件的文件名称列表】中仅包含一个文件名“Hive用户指南.pdf”,这表示压缩包内包含一个名为“Hive用户指南.pdf”的文件,该文件是Hive用户指南的PDF版本。PDF格式是一种通用的文档格式,可以跨平台查看,便于打印和分享。PDF格式的指南可以包含文字、图片和格式化内容,这使得它成为编写和分发用户文档的一个理想选择。 从知识点来看,Hive用户指南通常会包含以下内容: 1. Hive简介:介绍Hive是什么、它的目的以及它是如何在大数据领域使用的。 2. Hive架构:解释Hive的各个组件,包括驱动器、编译器、元数据存储和执行引擎。 3. 安装和配置:提供在不同环境下安装Hive的步骤,以及如何配置Hive以满足特定需求。 4. HiveQL:详细介绍Hive查询语言的语法和操作,包括数据定义语言(DDL)、数据操作语言(DML)、查询语句(SELECT)、连接(JOIN)操作、聚合(aggregate)函数等。 5. 数据存储:阐述如何在Hive中存储数据,如何管理表,包括外部表和分区表等概念。 6. 性能优化:讨论如何优化Hive查询,包括表的倾斜处理、索引的创建、执行计划的分析等。 7. 安全性:讲解Hive的安全特性,例如权限控制、用户认证等。 8. 故障排除:提供一些常见问题的解决方法和诊断Hive问题的技巧。 Hive用户指南是理解和使用Hive的关键文档,无论是对于初学者还是经验丰富的数据仓库工程师,都是宝贵的学习资源。
recommend-type

【交互式数据分析】:打造用户友好的数据分析报告

# 摘要 随着大数据时代的到来,交互式数据分析在多个领域变得至关重要,它允许用户通过直观的界面直接与数据交互,从而获得深入洞察。本文首先介绍了交互式数据分析的基础概念,并探讨了选择合适工具的重要性,包括比较不同数据可视化工具和编程语言的适用性。随后,本文深入讲解了数据收集、预处理、报告构建以及分析结果解释的实践步骤,强调了用户体验和报告性能优化对于数据分析的影响。最后,通过行业案例分析,本文展示了
recommend-type

CISC RISC区别

<think>好的,我现在需要回答用户关于CISC和RISC区别的问题。首先,我得回忆一下CISC和RISC的基本概念,确保自己理解正确。CISC是复杂指令集计算机,而RISC是精简指令集计算机。两者的设计哲学不同,一个注重复杂的指令,另一个强调简化指令。 接下来,用户可能希望了解它们的主要区别,所以我得从指令集复杂度、指令执行时间、硬件结构、应用场景等方面展开。记得要对比两者的优缺点,比如CISC的指令丰富但可能效率低,RISC的指令少但执行快。 另外,用户可能对实际应用例子感兴趣,比如哪些处理器属于CISC,哪些属于RISC。比如Intel的x86是CISC,而ARM属于RISC。需要
recommend-type

VICTORIAN字体:复古与经典的完美融合

根据提供的文件信息,标题和描述均为“VICTORIAN”,标签为“字体”,并且提到了压缩包子文件的文件名称列表为“276”。此信息暗示了文件内容可能涉及到某种名为“VICTORIAN”的字体,且该文件可能是以某种压缩格式存储的字体文件集合。在这种情况下,我们可以假设文件列表中的“276”可能指代该字体文件的编号或版本号,但因信息量有限,我们无法确定具体细节。 ### 知识点详细说明: #### 1. 字体的概念 - 字体(Font)是由一系列具有相同风格和设计的字符、数字和符号所组成的集合,用于文字排版和设计。 - 字体在视觉传达、排版设计以及数字媒体上扮演着重要角色,影响着文档或设计作品的整体观感和可读性。 #### 2. 字体的分类 - 按照字体的设计风格和用途,字体可以分为许多种类,如衬线字体(Serif)、无衬线字体(Sans-serif)、手写字体、装饰字体等。 - “VICTORIAN”这一名称暗示该字体可能与维多利亚时代(Victorian era)相关,维多利亚时代是英国历史上一个艺术风格倾向于华丽和装饰的时代,因此该字体可能具有复古、繁复的装饰元素。 #### 3. 字体的风格特点 - 维多利亚时代风格的字体可能具有以下特点: - 繁复的装饰线条,可能包含涡卷、花边等元素; - 细节丰富,如小写字母的连接部分、上标的装饰性小勾等; - 可能包含历史上的古英文字符,如“thorn”(þ)和“eth”(ð)。 #### 4. 字体文件及其存储格式 - 字体文件通常用于存储字体的字形、格式信息以及可能的字型修饰。常见的字体文件格式包括TrueType (.ttf)、OpenType (.otf)、Web Open Font Format (.woff/.woff2)等。 - 压缩包子文件可能是一个压缩格式的文件,包含多个字体文件。压缩文件格式通常用于减少文件大小,便于存储和传输,常见的压缩格式有ZIP、RAR、7z等。 #### 5. 字体的应用 - 字体广泛应用于排版、广告设计、网站设计、游戏、电影字幕、移动应用和各种数字媒体中。 - 正确选择和使用字体对于提升视觉效果和信息传达具有重要作用。 #### 6. 字体的授权与使用 - 字体通常受版权保护,使用字体时需注意版权问题。设计师和出版商可能需要购买授权或字体许可证才能合法使用特定字体。 - 有些字体是免费提供给公众使用的,例如由开源社区创建的字体,这类字体在遵循特定的许可协议下可以免费使用。 综上所述,从给定的文件信息中我们可以推断出,所讨论的“VICTORIAN”很可能是一种具有复古装饰风格的字体,通常用于创造具有历史氛围和艺术效果的设计作品。其文件可能储存在压缩文件中,以减少文件大小并便于传输。由于缺少具体文件格式和更详细的信息,无法给出更精确的描述,但上述内容涵盖了相关的字体设计、分类、使用和版权等多个方面的知识点。
recommend-type

【预测模型优化】:提升预测准确度的策略

# 摘要 本文系统地探讨了预测模型优化的各个方面,从数据准备、模型训练与评估到性能优化和实战应用。首先,本文介绍了预测模型优化的基础概念,并强调了数据准备阶段对模型性能的重要性。随后,深入分析了多种模型训练和评估技术,包括超参数调优、交叉验证以及评估指标的解读。进一步探讨了集成学习、