Ada中不同类型之间的数组切片

大卫·纪梵

我正在阅读的Ada教程说,这是在Ada中要做的一件事:

Large : array (0 .. 100) of Integer;
Small : array (0 .. 3) of Integer;

-- extract section from one array into another.
Small(0 .. 3) := Large(10 .. 13);

但是,当我实际尝试时,它不起作用。

为了简单起见,我正在使用ideone的在线Ada环境来玩这些东西(上面的链接)。本教程是否错误,或者是指ideone未实现的Ada版本?

本教程是错误的。

但这会编译:

type Integer_Array is array (Natural range <>) of Integer;
Large : Integer_Array (0 .. 100);
Small : Integer_Array (0 .. 3);

...
Small (0 .. 3) := Large (10 .. 13);

详细信息:在我的示例中,Integer_Array是一个类型(实际上是一个类型和一个“第一子类型”),Integer_Array(0..100)并且Integer_Array(0..3)是受约束的子类型Ada中的数组类型指定索引的类型和元素的类型,但不指定范围;边界由子类型(特别是受约束的子类型)指定。(这并不意味着您需要一个subtype声明;type声明可以导致定义类型和受约束的子类型。)

Ada分配(通常)要求源和目标是同一类型,但是它们可以是不同的子类型。因此,在我的示例中,源和目标都是的子类型Integer_Array,因此分配满足此要求。

在原始示例中,声明LargeSmall定义了新的匿名数组类型。每种类型都是无界的,并且声明还定义了用作变量的子类型的有界子类型。但是这里重要的是定义了两种不同的类型,您不能将一种类型分配给另一种类型。此外,由于类型是未命名的,因此您不能使用类型转换来使分配工作正常进行,就像在这样的示例中那样:

type Integer_Array is array (Natural range <>) of Integer;
Large : array (0 .. 100) of Integer;
Small : Integer_Array (0 .. 3);

...
Small (0 .. 3) := Integer_Array (Large (10 .. 13));

在这里,LargeSmall再次有两种不同类型,但类型转换是可能的,因为目标类型而得名。

这里的道义是最好使用命名数组类型。像这样的变量声明

Large : array (0 .. 100) of Integer;

在某些情况下可能足够好;但是如本例所示,有些事情您无法使用它们完成。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在同一函数中接受不同类型的切片?

来自分类Dev

在Ada中复制相同类型和大小但索引类型不同的数组

来自分类Dev

检查golang中的切片类型

来自分类Dev

Golang中的常规切片类型?

来自分类Dev

C中的数组切片

来自分类Dev

numpy数组中的互补切片

来自分类Dev

从Go中的切片构造数组

来自分类Dev

SystemVerilog中的struct切片数组

来自分类Dev

红宝石中的数组切片返回不同的结果-无与空数组

来自分类Dev

对numpy数组的不同行进行不同的切片

来自分类Dev

Golang:结构切片之间的类型转换

来自分类Dev

如何使numpy数组切片元素与众不同?

来自分类Dev

此方法的返回类型是切片还是借用的数组?

来自分类Dev

计算的切片位置不同于DICOM文件中的切片位置

来自分类Dev

从切片的TIFF中提取切片并存储在numpy数组中

来自分类Dev

Swift中不同类型的多维数组

来自分类Dev

Javascript中不同类型的数组?

来自分类Dev

不同类型的数组

来自分类Dev

为什么花式索引与numpy中的切片不同?

来自分类Dev

根据数据中的关系切片数组(在Ruby中)

来自分类Dev

从PHP中的数组中删除切片

来自分类Dev

如何在Rust中获取切片作为数组?

来自分类Dev

在Julia中对数组进行切片

来自分类Dev

$ addToSet更新后,mongodb中的切片数组

来自分类Dev

NumPy数组中连续值的切片

来自分类Dev

从numpy数组中删除多个切片

来自分类Dev

通过Perl中的哈希引用数组获取切片

来自分类Dev

Cython中类似于Fortran的数组切片

来自分类Dev

如何在Go中获取切片的基础数组?