我有一个巨大的记录,我希望比较使用它.有没有办法在比较中省略记录中的一个字段,还是我必须单独检查每个字段?
例:
type Apple_T is record
Redness_Scale : Integer;
Weight : Natural:
Age : Natural;
Eaten : Boolean;
end record;
Run Code Online (Sandbox Code Playgroud)
我想比较发红,体重和年龄,但不要吃.有没有办法,我可以做到这一点,没有三个独立的状态网络?
不,你必须写代码
return (Left.Redness_Scale = Right.Redness_Scale) and then
(Left.Weight = Right.Weight) and then
(Left.Age = Right.Age);
Run Code Online (Sandbox Code Playgroud)
(假设你有一个返回布尔值的函数来测试苹果是否相等).从技术上讲,这些不是三个单独的陈述.但是,不,你定义记录的方式,你必须使用三个相等比较.
但是,您可能想要考虑苹果的原始"特征"(与某人对苹果采取的行动相反)可能值得转变为他们自己的抽象,类似于
type Apple_Characteristics is record
Redness_Scale : Integer;
Weight : Natural:
Age : Natural;
end record;
type Apple_T is record
Characteristics : Apple_Characteristics;
Eaten : boolean;
end record;
Run Code Online (Sandbox Code Playgroud)
现在,您可以Characteristics使用一个相等测试来比较两个记录的组件.这是分离特征的一个好处,但也可能有其他特征; 如果字段足够相关,比较将这些字段组合在一起并忽略其他字段,则可能还有其他操作本身将这些字段视为一个组.
它确实意味着您必须使用A.Characteristics.Weight(例如)获取字段.但是假设你已经完成了你应该做的事情并创建Apple_T了一个私有类型,并为包的其他用户提供了操作(过程/函数),那么添加的需要.Characteristics只发生在定义Apple_T它的包的主体中实现这些操作.将其Apple_Characteristics分成另一个记录类型是包的用户不需要知道的实现细节.
| 归档时间: |
|
| 查看次数: |
386 次 |
| 最近记录: |