数组 – 在Delphi中定义记录 – (记录为类型vs记录为变量) – 差
我一直在研究Delphi中的记录,在大多数情况下我看到它们用作Type,然后声明它的一个新变量,例如:
type TMyRecord = record data1: sometype; data2: sometype; end; var OnesRecord: TMyRecord; 对于数组,它也用作: type TMyRecord = record data1: sometype; data2: sometype; end; var OnesRecord: array of TMyRecord; 我的问题如下: 为什么不应该使用第一种方法用于数组,方式如下: type TMyRecord = array of record data1: sometype; data2: sometype; end; var OnesRecord: TMyRecord; 另外,如果使用直接定义为变量的记录,例如: var OnesRecord: record data1: sometype; data2: sometype; end; 要么 var OnesRecord: array of record data1: sometype; data2: sometype; end; ? 最后一件事;如果要合并第二种和第三种方法,并且具有该类型的数组类型和该类型的数组的变量,它是否与具有数组的数组有什么不同? 那么,是这样的: type TMyRecord = array of record data1: sometype; data2: sometype; end; var OnesRecord: array of TMyRecord; 与此不同的是: type TMyRecord = record data1: sometype; data2: sometype; end; var OnesRecord: array of array of TMyRecord; 解决方法
做你正在做的事情没什么不对,就像没有什么能阻止你重载Add()运算符来做乘法.
你的问题完全是理论上的,因此很难用这种或那种方式说出来.是的,这些结构是“合法的”.所以呢? 这就像在你发现你可以走在你的手上之后询问走路而不是走路. 在所有情况下的问题是相同的……你为什么要这样做? 而不是询问“合法”但没有人使用的编码方法,为什么不尝试展示这样的用途被证明是有利的例子? 从理论的角度来看,您正试图混合两种不同的数据聚合机制. 数组是一种收集相同类型项目的方法.记录和类是收集不同类型的相关项目的一种方式.它们都是各种容器,但它们具有不同的特性. 您通常将数组声明为“数组”而不是“数组记录…结束”. 按照惯例,您将记录定义为TYPE,以便您可以“重用”该类型. 你显然没有太多的经验,因为你不能在非常狭窄的环境之外使用这些结构. 假设您要定义类似“整数数组”的内容;您可以将其定义为特定类型: type TIntArray = array of integer; 你为什么要这样做?因为有时你会发现声明两个不同的东西都是“整数数组”使它们不兼容类型,这是违反直觉的. 但是如果它们都被声明为TIntArray,那么编译器会接受它. 我不知道这是否是正确的术语,但就编译器而言,“myvar:”和“myvar:”之间存在差异.在这种情况下,将是“TIntArray”,并且将是“整数数组”. var myvar1 : array of integer; myvar2 : TIntArray; 这两个在所有情况下都不兼容.此外, procedure myproc( AVar : array of integer ) 不接受myproc(myvar2),因为myvar2不是“整数数组”类型.真!它的类型为TIntArray.看到不同? 现在用任何类型的“记录……结束”,甚至你的“记录…结束”事件取代该声明,你开始看到你所要求的限制.是的,编译器消化它就好了.它只是不允许你作为匹配该类型的参数传递任何东西!即使他们“看起来”完全一样,不管你信不信. 所以,为了回答你自己的问题,我挑战你构建一个非平凡的例子,你提出的事情实际上是有意义的,编译器接受它们.因为虽然编译器可能接受您在上面创建的孤立示例,但它们在实践中不太可能工作得很好(如果有的话). 但是,当你提出一个富有洞察力的问题时,你会得到Audacity的’A’! (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |