类 Pascal 语言中的类型等价
Type equivalence in Pascal-like languages
Oberon-2 语言报告 "The Programming Language Oberon–2" 在附录 A 中有以下定义:
Two variables a and b with types Ta and Tb are of the same type if
- Ta and Tb are both denoted by the same type identifier, or
- Ta is declared to equal Tb in a type declaration of the form Ta = Tb, or
- a and b appear in the same identifier list in a variable, record field, or formal parameter declaration and are not open arrays.
给定类型声明
Ta = INTEGER
Tb = INTEGER
Tc = Tb
上述定义中的第二段表明
- Ta 和 Tb 是不同的类型(没有声明 Ta = Tb),
- Ta 和 Tc 是不同的类型(没有声明 Ta = Tc) 和
- Tc 和 INTEGER 是不同的类型(没有声明 Tc = INTEGER)。
这是对 Oberon-2 中同类型的正确解释吗?据我了解,Oberon-2 在名称等价方面非常严格,在这种情况下,解释实际上是有道理的。 Standard Pascal 和 ISO Modula-2 怎么样?
问题中同类型的解释遵循所谓的严格名称等价。例如,在 Ada 中,此功能通过 派生类型 得到支持。在严格的名称等价性下,每个类型声明都引入了一个不同的类型。然而,Pascal、Modula-2 和 Oberon 都使用 非严格名称等价 。这意味着对于类型标识符 Ta,声明 Tb = Ta 和 Tc = Ta 使Tb和Tc等价.
Oberon-2 语言报告 "The Programming Language Oberon–2" 在附录 A 中有以下定义:
Two variables a and b with types Ta and Tb are of the same type if
- Ta and Tb are both denoted by the same type identifier, or
- Ta is declared to equal Tb in a type declaration of the form Ta = Tb, or
- a and b appear in the same identifier list in a variable, record field, or formal parameter declaration and are not open arrays.
给定类型声明
Ta = INTEGER
Tb = INTEGER
Tc = Tb
上述定义中的第二段表明
- Ta 和 Tb 是不同的类型(没有声明 Ta = Tb),
- Ta 和 Tc 是不同的类型(没有声明 Ta = Tc) 和
- Tc 和 INTEGER 是不同的类型(没有声明 Tc = INTEGER)。
这是对 Oberon-2 中同类型的正确解释吗?据我了解,Oberon-2 在名称等价方面非常严格,在这种情况下,解释实际上是有道理的。 Standard Pascal 和 ISO Modula-2 怎么样?
问题中同类型的解释遵循所谓的严格名称等价。例如,在 Ada 中,此功能通过 派生类型 得到支持。在严格的名称等价性下,每个类型声明都引入了一个不同的类型。然而,Pascal、Modula-2 和 Oberon 都使用 非严格名称等价 。这意味着对于类型标识符 Ta,声明 Tb = Ta 和 Tc = Ta 使Tb和Tc等价.