IRIS编程指北
文章平均质量分 67
yaoxin521123
创造价值,分享学习,一起成长,相伴前行。
展开
-
第六十五章 符号概览
如果内容以数字字符开头,则表达式返回该数字字符及其后面的所有数字字符,直到第一个非数字字符。如果此变量的内容不以数字字符开头,则表达式返回。这些表达式中的每一个都返回一个数字。此语法可以在触发器代码中使用,并在类编译时替换。时,可以使用此语法。这些项目不区分大小写。问号是模式匹配运算符,原创 2023-10-23 07:56:13 · 183 阅读 · 0 评论 -
第六十四章 符号概览
在随意使用中,很常见的是引用一个例程,就好像它的名称包含一个初始插入符号一样。因此,可能会看到有关。通常,可以根据上下文判断引用是对全局还是对例程。在内部使用一些,但不提供任何供公众使用。可以定义和使用自己的进程私有。这是带引号的字符串或不带引号的字符串。其中每一个都是扩展引用——对另一个命名空间中的。其中每一个都是结构化系统变量,它提供有关。它们不能用于任何其他情况。,是一种临时存储大数据值的机制。这是一个隐含的命名空间。、作业、锁或例程的信息。这是一个隐含的命名空间。其中每一个都是进程私有。原创 2023-10-22 09:04:19 · 246 阅读 · 0 评论 -
第六十三章 符号概览
系统类中的大多数包、类和方法都以百分号字符开头。从上下文来看,应该清楚正在检查的元素是否是其中之一。请注意,美元符号不是其名称的一部分(因此在宏定义中看不到)。在随意使用时,通常会认为宏的名称包含美元符号。包的别名,用于提供对该包的类中的方法的独立于语言的访问。插入符号后面的部分是包含该子例程的例程的名称。是在包含此引用的例程或方法中定义的子例程。是可选的以逗号分隔的参数列表那个方法。是可选的以逗号分隔的参数列表。也可以是自定义特殊变量。也可以是自定义函数。是该类中的方法名称,这些是伪字段关键字。原创 2023-10-21 08:07:05 · 296 阅读 · 0 评论 -
第六十二章 符号概览
请参阅指定可变数量的参数和可变数量的参数。在每种情况下,两个句点一起构成从一个类成员内部到另一个类成员的引用的开始。它从当前类中同名的当前方法中调用超类的重写方法。是同一类中的另一个方法,xxx 是可选的以逗号分隔的参数列表。此语法只能在实例方法中使用(不能在例程或类方法中使用)。在方法或过程的参数列表中,最后一个参数后面可以跟三个句点。此语法只能在方法中使用(不能在例程中使用)。此语法只能在方法中使用(不能在例程中使用)。是该方法的以逗号分隔的参数列表。是可选的以逗号分隔的参数列表。原创 2023-10-20 08:01:10 · 257 阅读 · 0 评论 -
第六十一章 符号概览
当调用方法或例程时,可以通过引用或作为输出传递参数。为此,请在参数前放置一个句点。) 是运算符后的二进制排序。在第一种形式中,此表达式测试字符串文字。) 是二进制包含运算符。在第一种形式中,此表达式测试字符串文字“) 是二进制跟随运算符。在第一种形式中,此表达式测试字符串文字。是否按数字下标排序规则排序在字符串文字。”都可以包含字母以外的字符。”都可以包含字母以外的字符。整理顺序出现在字符串文字。都可以包含字母以外的字符。”是否包含字符串文字“请注意,字符串文字“请注意,字符串文字“原创 2023-10-19 08:00:03 · 272 阅读 · 1 评论 -
第六十章 符号概览
例程名称可以以百分号开头,并且可以包含一个或多个句点。(然而,在随意使用中,引用一个例程是很常见的,就好像它的名称包含一个初始插入符号一样。本节列出了看起来像带有非字母数字字符的单词的表单。其中许多是显而易见的,因为操作员很熟悉。问号是模式匹配运算符。标签可以以百分号开头,但之后是纯字母数字。这是一个实例变量,可用于获取或设置对象的。箭头语法的示例,它指定隐式左外连接。是可选的、以逗号分隔的参数列表。都可以包含字母以外的字符。是同一类或超类中的属性。def` 是子类中的字段。”是正在测试的字符串文字。原创 2023-10-18 07:50:34 · 149 阅读 · 0 评论 -
第五十九章 学习常用技能 - 将数据从一个数据库移动到另一个数据库
在字段中输入文件名(包括其绝对或相对路径名),或者选择“浏览”并导航到该文件。的名称,它是否存在于本地名称空间或数据库中,如果存在,则最后一次修改的时间。b. 如果需要,请选择标题区域中的“切换”以选择感兴趣的命名空间。b. 如果需要,请选择标题区域中的“切换”以选择感兴趣的命名空间。d. 指定导入文件。输入文件名或选择“浏览”并导航到该文件。e. 选择“下一步”查看文件的内容。a. 在管理门户中,选择系统资源管理器 >a. 在管理门户中,选择系统资源管理器 >f. 使用表中的复选框选择要导入的。原创 2023-10-17 07:53:09 · 324 阅读 · 0 评论 -
第五十八章 学习常用技能 - 查看查询缓存
此工具计算此数据并将其与类的存储定义一起存储,作为类的。管理门户按架构对查询缓存中的项目进行分组。时除外),系统会生成可重用代码来访问数据,并将该代码放置在查询缓存中。会优化查询,然后生成并存储检索数据的代码。它将代码以及优化的查询文本存储在查询缓存中。找到与给定查询匹配的存储查询(除了空格等细微差别),它会使用为该查询存储的代码。会对其进行优化,然后将该查询的文本与查询缓存中的项目进行比较。要清除缓存的查询,请使用操作 > 清除缓存的查询。,系统也会生成可重用代码,但这包含在生成的。原创 2023-10-16 07:46:52 · 170 阅读 · 0 评论 -
第五十七章 学习常用技能 - 查看Globals
在管理门户中,可以测试代码将运行的查询。还可以在此处查看查询计划,它为提供有关查询优化器将如何执行查询的信息。可以使用此信息来确定是否应该向类添加索引或以不同的方式编写查询。 和 之间的值是存储此类数据的。个字符(不包括开头的插入符号),因此如果完整的类名称很长,系统会自动使用类名称的哈希形式。的列表(请注意,此显示省略了每个名称的初始插入符号)。命令或管理门户中的全局页面。存储持久类的数据,这意味着除非显示系统。b. 滚动到类定义的末尾。原创 2023-10-15 07:27:23 · 212 阅读 · 0 评论 -
第五十六章 学习常用技能 - 执行 SQL 查询
其中命名空间是所需的命名空间。这控制用户界面如何显示结果。是想要查看其值的属性。原创 2023-10-14 07:35:10 · 428 阅读 · 0 评论 -
第五十五章 学习常用技能 - 删除存储的数据
重置类的存储的操作会改变类访问其存储数据的方式。如果已存储该类的数据,并且已删除、添加或更改属性定义,然后重置存储,则可能无法正确访问存储的数据。因此,如果重置存储,还应该删除该类的所有现有数据,并根据需要重新生成或重新加载它。在实际应用中,有可能某些记录被删除,从而导致ID值存在间隙,并且这里的数字与行号不匹配。在开发过程中,可能需要删除某个类的所有现有测试数据,然后重新生成它(例如,如果删除了存储定义)。这些选项删除数据,但不删除类定义。(相反,如果删除类定义,则不会删除数据。是完整的包和类名称。原创 2023-10-13 07:32:18 · 150 阅读 · 0 评论 -
第五十四章 学习常用技能 - 生成测试数据
此类数据的创建称为数据填充,执行此操作的实用程序称为填充实用程序。当测试应用程序的各个部分在处理大量数据时如何运行时,此实用程序特别有用。类提供了生成特定形式的值的方法。或其他预定义值之类的名称,则系统会为该值调用合适的方法。这些类提供了生成不同典型形式的数据的方法。在此代码中,对于每个类,迭代所需的次数。对于参数的值,指定一个返回适合用作属性值的值的方法。参数,系统将调用该方法并使用它返回的值。在此代码中,要填充类,请执行该类的。方法,该方法继承自超类中的。方法,或者使用自己的方法。原创 2023-10-12 07:37:05 · 171 阅读 · 0 评论 -
第五十三章 学习常用技能 - Routine 映射
重要信息:当映射一个或多个例程时,请务必识别这些例程所需的所有代码和数据,并确保所有这些代码和数据在所有目标命名空间中可用。重要信息:映射包时,请务必标识该包中的类所需的所有代码和数据,并确保所有这些代码和数据在所有目标命名空间中可用。当映射例程时,该例程不必存在(也就是说,它可以是计划创建的例程的名称)。中找到该例程,该数据库不是命名空间的默认数据库。在要在其中定义此映射的命名空间的行中选择“例程映射”。在要在其中定义此映射的命名空间的行中选择“包映射”。对于例程数据库位置,选择应存储此例程的数据库。原创 2023-10-11 08:56:45 · 136 阅读 · 0 评论 -
第五十二章 学习常用技能 - Global 映射
登录管理门户。选择系统管理 > 配置 > 系统配置 > 本地数据库。选择创建新数据库以打开数据库向导。输入新数据库的以下信息:在文本框中输入数据库名称。通常这是一个包含字母数字字符的短字符串。输入目录名称或选择“浏览”以选择数据库目录。如果这是要创建的第一个数据库,则必须浏览到要在其中创建数据库的父目录;如果创建了其他数据库,则默认数据库目录是最后创建的数据库的父目录。选择完成。要创建使用本地数据库的命名空间:登录管理门户。选择系统管理 > 配置 > 系统配置 > 命名空间。原创 2023-10-10 07:33:58 · 270 阅读 · 0 评论 -
第五十一章 服务器配置选项
此设置(默认情况下处于启用状态)可确保在多种用例中获得最佳的开箱即用性能。以优化查询执行的效率。如果不关闭自适应模式,则无法独立控制自适应模式控制的各个功能。此设置指定创建或删除没有指定架构的表时要使用的默认架构名称。选项来设置系统范围内的分隔标识符支持。这就是可能为客户更改配置的方式。寻址形式(主机名,带或不带域限定符)。操作,例如创建或删除视图、触发器或存储过程。服务器有一些配置选项会影响编写代码的方式。在所有情况下,都会保留生成的。如何处理一对双引号内包含的字符。查询结果不存储在缓存中。原创 2023-10-09 07:41:58 · 134 阅读 · 0 评论 -
第五十章 本地化
IRIS支持本地化,以便可以为多个国家或多个地区开发应用程序。对于一组固定的语言,管理门户以浏览器设置指定的本地语言显示字符串。也可以为自己的应用程序提供本地化字符串。IRIS提供了一组预定义的语言环境。IRIS区域设置是一组元数据,指定特定国家或地理区域的用户语言、货币符号、格式和其他约定。区域设置指定写入IRIS数据库时要使用的字符编码。它还包括处理与其他字符编码之间的字符转换所需的信息。当安装IRIS服务器时,安装程序会设置该服务器的默认区域设置。原创 2023-10-08 07:52:36 · 133 阅读 · 0 评论 -
第四十九章 Applications
可以在管理门户中定义、修改和应用程序(前提是以具有足够权限的用户身份登录)。然而,当部署应用程序时,更有可能在安装过程中以编程方式定义应用程序;IRIS提供了实现此目的的方法。原创 2023-10-07 06:24:26 · 218 阅读 · 0 评论 -
第四十八章 Security
有时需要临时向用户添加一个或多个新角色(以编程方式),以便用户可以在特定上下文中执行通常不允许的任务。可以在管理门户中定义、修改和删除资源、角色和用户(前提是以具有足够权限的用户身份登录)。作为程序员,有责任在代码中包含适当的安全检查,以确保给定用户有权执行给定任务。角色是一个 安全元素,它指定一个名称和一组关联的权限(可能非常大)。对于定义的资产和资源,可以自由地以任一方式进行关联 - 通过硬编码或定义合适的配置系统。作为程序员,有责任在代码中包含适当的安全检查,以确保给定用户有权执行给定任务。原创 2023-10-06 08:35:36 · 172 阅读 · 0 评论 -
第四十七章 命名空间和数据库 - %SYS 命名空间
创建命名空间时,系统会自动定义该命名空间的映射。命名空间提供对并非在所有命名空间中都可用的代码的访问 - 操作安全元素、服务器配置等的代码。如果遵循某些命名约定,您可以在此命名空间中创建自己的代码和。通过扩展全局引用,代码可以访问其他命名空间中定义的全局变量。如果命名空间启用了互操作性,则可以在此命名空间中定义。对于此命名空间,默认例程数据库和默认全局数据库是。安全模型控制任何用户可以访问哪些数据和哪些代码。在大多数情况下,不应手动写入或删除任何这些。命名空间包含其他系统。原创 2023-10-05 08:47:08 · 222 阅读 · 0 评论 -
第四十六章 命名空间和数据库 - 系统提供的数据库
读/写数据库包括与系统管理相关的实用程序和数据。它旨在包含特定自定义代码和数据,并在升级时保留该代码和数据。只读数据库,包括对象、数据类型、流和集合类以及许多其他类定义。出于安全原因,管理门户以不同于其他数据的方式处理此数据;互操作性功能所需的附加代码,特别是创建集成单独软件系统的产品的能力。如果创建启用互操作性的命名空间,则该命名空间可以访问此数据库中的代码。读/写用于审计记录的数据库。包含该数据库的目录是系统管理员的目录。内部使用的项目,例如缓存的。会将审核数据写入此数据库。不支持移动、替换或删除。原创 2023-10-04 09:12:07 · 421 阅读 · 0 评论 -
第四十五章 命名空间和数据库 - 数据库基础知识
数据库会根据需要自动扩展,无需人工干预。如果预计某个特定数据库会增长并且可以确定它将变得有多大,则可以通过将其初始大小设置为接近预期的最终大小来“预扩展”它。数据库服务器网络可以配置为公共资源,共享数据存储和应用程序处理,数据在它们之间无缝分布。都为实际数据和组织数据的元数据提供物理完整性保证。即使在写入数据库期间发生错误,也能保证这种完整性。拥有一种在多个系统之间分配数据和应用程序逻辑及处理的技术。大多数情况下,可以在系统运行时创建、删除或修改数据库属性。当在两种类型的平台之间移动数据库时,这非常有用。原创 2023-10-03 18:19:14 · 231 阅读 · 0 评论 -
第四十四章 命名空间和数据库
在IRIS中,任何代码都在命名空间中运行,命名空间是一个逻辑实体。命名空间提供对数据和代码的访问,这些数据和代码(通常)存储在多个数据库中。数据库是一个文件——IRIS.DAT文件。IRIS提供了一组名称空间和数据库供使用,并且可以定义其他名称空间和数据库。命名空间有一个默认数据库,用于存储代码;这是该命名空间的例程数据库。当在命名空间中编写代码时,除非有其他注意事项,否则代码将存储在其例程数据库中。同样,当调用代码时,IRIS会在此数据库中查找它,除非有其他注意事项。原创 2023-10-02 10:02:27 · 249 阅读 · 0 评论 -
第四十三章 持久对象和SQL - 查看存储的数据
请注意,在本例中,我们看到 DOB 属性的显示值。(在门户中,还有另一个执行查询的选项,通过该选项,可以控制是否对结果使用逻辑模式或显示模式。会优化查询并生成和存储检索数据的代码。它将代码以及优化的查询文本存储在查询缓存中。请注意,此缓存是代码缓存,而不是数据缓存。本节演示对于任何持久对象,相同的值通过对象访问、由于篇幅原因,最后一个示例包含添加的换行符。可以查看查询缓存并删除其中的任何项目。,系统生成可重用的代码来访问数据。或者,在终端中,我们可以使用。请注意,这里我们看到的是。原创 2023-10-01 06:36:36 · 394 阅读 · 0 评论 -
第四十二章 持久对象和SQL - 用于创建持久类和表的选项
(但是请注意,当使用对象访问时,可以控制并发锁定的程度。如果知道不打算更改数据,则可以使用最小并发锁定。可以稍后再次运行向导来加载更多记录,而无需重新定义类。要创建持久类及其对应的。原创 2023-09-30 12:25:22 · 346 阅读 · 0 评论 -
第四十一章 持久对象和SQL - Storage
查看此信息可能很有用,在极少数情况下,可能需要更改一些详细信息(非常仔细)。对于持久类,集成开发环境 (IDE) 将显示类似以下内容作为类定义的一部分:原创 2023-09-29 03:52:46 · 375 阅读 · 0 评论 -
第三十八章 持久对象和SQL - 持久类的特殊选项
此外,索引还可以存储基于排序属性的查询经常请求的附加数据。通过包含附加数据作为索引的一部分,可以极大地提高使用索引的查询的性能;当查询使用索引生成其结果集时,它可以在不访问主数据存储设施的情况下执行此操作。关系是一种特殊类型的对象值属性,它定义两个或多个对象实例如何相互关联。每个关系都是双面的:对于每个关系定义,都有一个相应的逆关系定义另一面。类似地,当你保存一个对象时,系统也会自动保存它的所有对象值属性;当打开持久对象时,可以指定并发锁定的程度,因为持久对象可能会被多个用户或多个进程使用。原创 2023-09-28 08:41:52 · 288 阅读 · 0 评论 -
第三十七章 持久对象和SQL
IRIS是一个与面向对象编程语言相结合的多模型数据平台。通过SQL执行批量插入数据。打开一个对象,对其进行修改并保存,从而无需使用SQL即可更改一个或多个表中的数据。创建并保存新对象,将行添加到一个或多个表中,而无需使用SQL。使用SQL从记录中检索与给定条件匹配的值,而不是迭代大量对象。删除对象,即在不使用SQL的情况下从一个或多个表中删除记录。也就是说,可以随时选择适合需要的访问模式。在内部,所有访问都是通过直接Global访问完成的,也可以在适当的时候以这种方式访问的数据。原创 2023-09-25 07:36:17 · 318 阅读 · 0 评论 -
第三十六章 Objects - 有用的 ObjectScript 函数
当需要编写执行类方法的通用代码,但事先不知道类名(甚至方法名)时,此函数非常有用。如果没有参数,该函数返回当前上下文的类名。这在实例方法中很有用。其他功能在类似场景中也很有用。原创 2023-09-24 06:36:20 · 161 阅读 · 0 评论 -
第四十章 持久对象和SQL - Object IDs
在大多数情况下,使用此 ID 来处理对象。当删除或更改其他对象时,不会为对象分配新的。每个对象在其所属的每个范围内都有一个唯一的。请注意,当在管理门户中浏览表时,是子对象在未在父子关系中使用时将收到的。尽管有这个标题,伪字段的名称是。当首次保存对象时,会分配。此外,这些属性值无法更改。在其自己的范围内具有。在其范围内都是唯一的。此外,属性值无法更改。原创 2023-09-27 07:27:39 · 159 阅读 · 0 评论 -
第三十九章 持久对象和SQL - 持久类的 SQL 映射
相反,对于其他对象数据库,要对所有类型的人员进行计数,则需要编写组合表的更复杂的查询,并且每当添加另一个子类时都需要更新此查询。由于继承不是关系模型的一部分,因此类编译器将持久类的“扁平”表示映射为关系表。在实际应用中,有可能某些记录已被删除,从而导致ID值存在间隙,并且这些值与行号不匹配。中编写检索相同类型的所有记录的查询相对容易。对于任何持久类,该类的每个实例都可以作为表中的一行使用,可以通过。映射表包含该类的所有适当字段,包括继承的字段。,一个实例属于它作为实例的每个类的范围。字段,该字段不包括在。原创 2023-09-26 07:08:24 · 170 阅读 · 0 评论 -
第三十五章 Objects - 集合类
方法将项目添加到数组中,其中第一个参数是要添加的元素,第二个参数是键。数组元素按键排序,数字键在前,从小到大排序,字符串键在后,按字母顺序排序,大写字母在前,小写字母在前。列表中的元素按顺序排列。它们在列表中的位置可以使用范围从。的整数键来访问,其中 N 是最后一个元素的位置。要操作列表对象,请使用其方法。要操作数组对象,请使用其方法。还可以将属性定义为列表或数组。原创 2023-09-23 07:43:48 · 137 阅读 · 0 评论 -
第三十四章 Objects - 流接口类
如果需要传递长度超过此限制的值,或者需要值可能超过此限制的属性,则使用流。流是一个对象,它可以包含一个大小大于字符串大小限制的值。通常使用流作为其他对象的属性,并保存这些对象。流数据可以存储在外部文件。系统分配了固定数量的空间来保存字符串操作的结果。如果字符串表达式超过分配的空间量,则会导致。类型相同类型的数据,并且可以保存大型二进制对象,例如图片。要使用流对象,可以使用它的方法。流接口还包括其他方法,例如。类型相同类型的数据,旨在存储大量文字。方法将数据添加到流中,并使用。主要的流类使用由类中的。原创 2023-09-22 07:49:50 · 108 阅读 · 0 评论 -
第三十三章 Objects - OREFs
方法创建一个内部内存结构来包含对象的数据,并返回指向该结构的。认识到这种错误是有帮助的。这样的方法也会返回oref。,而是创建一个看起来像。注意:对于持久化类,像。原创 2023-09-21 06:57:10 · 129 阅读 · 0 评论 -
第三十二章 Objects
IRIS通过以下对象类提供对象技术:。下图展示了这些类之间的继承关系,以及它们的一些参数和方法。%Library包的类名称可以缩写,因此(例如)是的缩写。这里,全部大写的项目是参数,以百分号开头的项目是方法。在典型的基于类的应用程序中,可以根据这些类(以及专门的系统子类)定义类。所有对象都直接或间接继承自这些类之一,并且每个对象都是以下类型之一:注册对象是或其子类的实例。可以创建这些对象,但无法保存它们。另外两个类继承自,因此包含该类的所有参数、方法等。持久对象是的实例或子类。原创 2023-09-20 09:32:48 · 98 阅读 · 0 评论 -
第三十一章 Classes - 继承规则
与其他基于类的语言一样,可以通过继承组合多个类定义。类定义可以扩展(或继承)多个其他类。这些类又可以扩展其他类。请注意,类不能继承Python中定义的类(即.py文件中包含的类定义),反之亦然。以下小节提供了中类继承的基本规则。原创 2023-09-19 07:03:51 · 163 阅读 · 0 评论 -
第三十章 Classes - 方法生成器
在类定义中,可以在方法中定义宏并在该方法中使用它们。然而,更常见的是,在包含文件中定义它们,可以将其包含在任何类定义的开头。然后,该类中的任何方法都可以引用该包含文件或其包含的包含文件中定义的任何宏。宏是继承的。也就是说,子类可以访问与其超类相同的所有宏。原创 2023-09-18 08:02:44 · 358 阅读 · 0 评论 -
第二十九章 Classes - 方法参数
调用方法时,必须按照方法签名的顺序提供参数。因此,一旦你跳过了一个参数,你也必须跳过它后面的所有参数。中定义的,并且有任何带有默认值的参数,那么这些参数必须位于参数列表的末尾,以避免编译错误。调用方法时,它会对任何缺少的参数使用其默认值(如果指定)。方法的签名必须首先列出所需的参数,然后是具有默认值的任何参数。编写的,则任何具有默认值的参数都必须在参数列表的末尾定义。例如,下面是一个接受三个参数的方法的部分定义。可以定义一个方法,使其接受可变数量的参数。调用方法时,如果有合适的默认值,可以跳过参数。原创 2023-09-16 07:25:49 · 146 阅读 · 0 评论 -
第二十八章 Classes - 引用其他类的方法
在实例方法中,有时需要引用当前实例本身,而不是实例的属性或方法。例如,在调用其他代码时,可能需要将当前实例作为参数传递。并非所有方法都有返回值,因此请选择适合情况的语法。中,使用特殊变量$THIS来引用当前实例。原创 2023-09-15 07:54:53 · 138 阅读 · 0 评论 -
第二十七章 Classes - 引用其他类成员
提供的类中,按照惯例,所有参数都以大写字母定义,但代码不需要这样做。此外,还可以调用对象值属性的实例方法或类方法。包装器方法返回参数,并在需要时调用此方法。注意,不能在类方法中使用此语法来引用实例方法。属性来获取当前类的名称,如上面的示例所示。访问一个类方法,可以在所有上下文中使用。实例方法中,还可以使用更短的。示例中使用的语法称为点语法。原创 2023-09-14 07:31:27 · 194 阅读 · 0 评论 -
第二十六章 Classes - Methods
在方法定义中,可以包含影响方法行为的可选编译器关键字。默认情况下,方法是公共的并且可以在任何地方访问。可以将方法标记为私有(通过。方法有两种:实例方法和类方法(在其他语言中称为静态方法)。必须以全部小写字母编写方法的语言,如示例中所示。该关键字指定该方法是私有的,并且只能与。关键字,编译器将默认该方法是用。关键字的值并且不能覆盖它。原创 2023-09-13 07:33:14 · 126 阅读 · 0 评论