我想通过制作一个用于操作多项式的包来测试编写 Ada 包的能力。多项式可以为广泛的代数结构定义,为了反映这一点,我想使包通用,以便它可以与浮点数、整数或其他数字子类型一起使用。
我现在想说的是,我对 Ada 的类型系统如何工作或它的包系统如何工作知之甚少。网络上似乎缺乏好的初学者 Ada 信息,所以我不得不从这篇对新手不太友好的 Wikibooks 文章中收集我能获得的智慧。
此页面包含有关类型层次结构的一些信息。基于此,我的多项式包所基于的合理类型似乎是Scalar
类型,因为显然这是定义算术运算的类型。所以这就是我尝试过的,在polynomials.ads
:
generic
MAX_DEGREE : Positive;
type Element is new Scalar;
package Polynomial is
type Polynomial is Array (0 .. MAX_DEGREE) of Element;
end Polynomial;
然而,这只是给我带来了"Scalar" is undefined
GNAT 的错误。
到目前为止,我真的只是半盲的感觉,我实际上不知道这些东西是如何工作的。如果我似乎有任何您认为需要澄清的重大误解,请告诉我。可能最简单的方法是提供我可以从中学习的示例polynomial.ads
和polynomial.adb
代码 - 就像多项式类型的定义(具有通用最大度数和元素类型)和一个简单的示例函数(例如添加两个多项式),所以我可以看到通用性功能起作用。
PS:有点相关,有没有办法为您的用户定义类型定义属性?