什么是差异?
首先,术语:它的名称是“Ada”,而不是“ADA” - 它是以“Ada Lovelace”命名的;它不是一个首字母缩略词。
子类型与其基类型兼容,因此您可以将基类型的操作数与基类型的操作数混合使用。例如:
subtype Week_Days is Integer range 1..7;
由于这是一个子类型,您可以(例如)将1
添加到工作日以获取下一个工作日。
派生类型是完全独立的类型,具有与其基本类型相同的特征。您不能将派生类型的操作数与基本类型的操作数混合使用。例如,如果您使用:
type Week_Day is new Integer range 1..7;
那么你就不能通过将整数加到星期几来得到另一个星期几。要对派生类型进行操作,通常需要自己定义这些操作(例如创建一个包)。同时,派生类型确实“继承”了其基础类型的所有操作(甚至一些可能没有意义的操作),因此仍然可以进行加法操作。
Integer'(1)
。 - Simon Wright基本的区别是派生类型是一个不同的类型。你不能只是把一个赋值给另一个,或者在表达式中一起使用他们。而子类型则可以与其原始类型兼容。你可以在不输入任何类型转换代码的情况下将它们一起使用。
子类型的范围比基础类型窄,因此可能会进行范围检查(我相信这可能会引发Constraint_Error)。所以你仍然需要小心。
subtype My_Float is Float;
- Simon Wright