gpt4 book ai didi

arrays - Ada:为什么 ""A".. "F""不是离散的?

转载 作者:行者123 更新时间:2023-12-04 17:00:07 24 4
gpt4 key购买 nike

程序文本

type T is array ("A" .. "F") of Integer;

编译器控制台输出
hello.adb:4:22: discrete type required for range



如果我的理解是正确的,第 9 条来自 chapter 3.6的 Ada 引用手册是编译器引发编译错误的原因:

Each index_subtype_definition or discrete_subtype_definition in an array_type_definition defines an index subtype; its type (the index type) shall be discrete.



因此,为什么是 "A" .. "F"不是 discrete ?什么discrete究竟是什么意思?

背景资料

下面引用了数组类型定义的语法要求。来源: Ada Reference Manual
array_type_definition ::= unconstrained_array_definition | constrained_array_definition

constrained_array_definition ::= array (discrete_subtype_definition {, discrete_subtype_definition}) of component_definition

discrete_subtype_definition ::= discrete_subtype_indication | range

range ::= range_attribute_reference | simple_expression .. simple_expression

simple_expression ::= [unary_adding_operator] term {binary_adding_operator term}

term ::= factor {multiplying_operator factor}

factor ::= primary [** primary] | abs primary | not primary

primary ::= numeric_literal | null | string_literal | aggregate | name | qualified_expression | allocator | (expression)

最佳答案

这个:

"A" .. "F"

确实满足 range 的语法;它包含一个 simple_expression ,其次是 .. ,然后是另一个 simple_expression .所以这不是语法错误。

它仍然无效;具体来说,这是一个语义错误。语法并不是决定一段代码是否有效的唯一因素。例如, "foo" * 42是一个语法上有效的表达式,但它在语义上是无效的,因为没有 *字符串和整数的运算符(除非您自己编写)。

离散类型是整数类型或枚举类型。 Integer , Character , 和 Boolean是离散类型的例子。浮点类型、数组类型、指针类型、记录类型等不是离散类型,因此这些类型的表达式不能用于 discrete_subtype_indication 的范围内。 .

这个:
type T is array ("A" .. "F") of Integer;

大概应该是:
type T is array ('A' .. 'F') of Integer;

字符串文字的类型是 String ,这是一个数组类型。字 rune 字的类型为 Character ,这是一个枚举类型,因此是一个离散类型。

您在另一个答案的评论中写道:

Unfortunately I'm unable to replace the string literals by character literals and recompile the code ...



如果真是这样,那就太可惜了。您发布的代码根本无效;它不会编译。您唯一的选择是修改它或不使用它。

关于arrays - Ada:为什么 ""A".. "F""不是离散的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25828976/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com