Ada: `limited interface` 中 `limited` 的作用是什么
Ada: What is the purpose of `limited` in `limited interface`
几周前我开始学习 Ada。我知道 limited
在某些情况下声明了一个有限类型,不允许复制对象
来自Ada Reference Manual 2012 7.5 1/2
A limited type is (a view of) a type for which copying (such as for an assignment_statement) is not allowed. A nonlimited type is a (view of a) type for which copying is allowed.
但是,由于 interface
类型本质上是抽象的,因此无法创建 'interface object',因此无法复制。关键字 limited
在这里是多余的吗? limited interface
和 interface
有什么区别?
type Abstract_Fruit_Type is interface;
type Abstract_Fruit_Type is limited interface;
我想我明白了:
limited interface
可用于扩展 synchronized interface
及其子类别 task interface
和 protected interface
,而(非限制)interface
则不能。
-- This is allowed
type Abstract_Type is limited interface;
type Task_Type is task interface and Abstract_Type;
-- This is not allowed
type Abstract_Type is interface;
type Task_Type is task interface and Abstract_Type;
-- error: (Ada 2005) task interface cannot inherit from non-limited interface
task interface
和 protected interface
以及它们的父级 - 所有 synchronized interface
都具有固有的局限性。 Ada Reference Manual 2012 3.9.4 12/2指定以下
A type derived from a nonlimited interface shall be nonlimited.
这意味着
A type that is limited cannot be derived from a nonlimited interface.
事件虽然接口类型本身是抽象的,但它们用于创建具体类型,其对象可以定义。由于上述限制,limited interface
中的limited
关键字是必需的。
关键区别在于ARM 3.9.4 12/2
A type derived from a nonlimited interface shall be nonlimited.
所以如果你想实现一个有限类型的接口,那么你必须用limited关键字标记接口。然后你就可以实现这个接口了,有限制的或者没有限制的类型。
如果您在接口描述中省略 limited 关键字,那么它的所有实现都将只是非限制类型。
Limited
在 Ada 类型声明中表示“这个东西没有赋值。”
在 Ada 的 generic
或 interface
中,像 limited 或 private 这样的关键字被颠倒了:你是说“这里代表的东西不能假设有 属性 X”。所以你可以用一个整数实例化一个私有类型的泛型参数,但是在泛型本身内部你只能指望来自泛型形式规范的属性。
几周前我开始学习 Ada。我知道 limited
在某些情况下声明了一个有限类型,不允许复制对象
来自Ada Reference Manual 2012 7.5 1/2
A limited type is (a view of) a type for which copying (such as for an assignment_statement) is not allowed. A nonlimited type is a (view of a) type for which copying is allowed.
但是,由于 interface
类型本质上是抽象的,因此无法创建 'interface object',因此无法复制。关键字 limited
在这里是多余的吗? limited interface
和 interface
有什么区别?
type Abstract_Fruit_Type is interface;
type Abstract_Fruit_Type is limited interface;
我想我明白了:
limited interface
可用于扩展 synchronized interface
及其子类别 task interface
和 protected interface
,而(非限制)interface
则不能。
-- This is allowed
type Abstract_Type is limited interface;
type Task_Type is task interface and Abstract_Type;
-- This is not allowed
type Abstract_Type is interface;
type Task_Type is task interface and Abstract_Type;
-- error: (Ada 2005) task interface cannot inherit from non-limited interface
task interface
和 protected interface
以及它们的父级 - 所有 synchronized interface
都具有固有的局限性。 Ada Reference Manual 2012 3.9.4 12/2指定以下
A type derived from a nonlimited interface shall be nonlimited.
这意味着
A type that is limited cannot be derived from a nonlimited interface.
事件虽然接口类型本身是抽象的,但它们用于创建具体类型,其对象可以定义。由于上述限制,limited interface
中的limited
关键字是必需的。
关键区别在于ARM 3.9.4 12/2
A type derived from a nonlimited interface shall be nonlimited.
所以如果你想实现一个有限类型的接口,那么你必须用limited关键字标记接口。然后你就可以实现这个接口了,有限制的或者没有限制的类型。
如果您在接口描述中省略 limited 关键字,那么它的所有实现都将只是非限制类型。
Limited
在 Ada 类型声明中表示“这个东西没有赋值。”
在 Ada 的 generic
或 interface
中,像 limited 或 private 这样的关键字被颠倒了:你是说“这里代表的东西不能假设有 属性 X”。所以你可以用一个整数实例化一个私有类型的泛型参数,但是在泛型本身内部你只能指望来自泛型形式规范的属性。