【发布时间】:2010-04-21 05:32:46
【问题描述】:
有什么区别?
【问题讨论】:
-
这和prolog有什么关系?
有什么区别?
【问题讨论】:
首先,术语:它是“Ada”,而不是“ADA”——它是以“Ada Lovelace”命名的;这不是首字母缩写词。
子类型与其基类型兼容,因此您可以将基类型的操作数与基类型的操作数混合使用。例如:
subtype Week_Days is Integer range 1..7;
由于这是一个子类型,您可以(例如)将1 添加到工作日以获得下一个工作日。
派生类型是完全独立的类型,具有与其基类型相同的特征。不能将派生类型的操作数与基类型的操作数混合。例如,如果您使用:
type Week_Day is new Integer range 1..7;
那么您将不能够将整数添加到工作日以获得另一个工作日。要对派生类型进行操作,您通常会自己定义这些操作(例如,创建一个包)。同时,派生类型确实“继承”了其基类型的所有操作(甚至是一些可能没有意义的操作),因此您仍然可以得到加法。
【讨论】:
Integer'(1)。
【讨论】:
基本区别在于派生类型是不同的类型。您不能只将一个分配给另一个,或者在表达式中一起使用它们。另一方面,子类型与其原始类型是赋值兼容的。您可以一起使用它们而无需输入任何类型转换代码。
不过,子类型的范围会比基本类型更窄,因此可能会有范围检查(我相信可以从中引发 Constraint_Error)。所以你还是要小心。
【讨论】:
subtype My_Float is Float;