我正在尝试为大学的一门课程学习 Ada,但我在思考其中的一些想法时遇到了很多问题。
我目前的绊脚石:假设我有一个函数,它接受一个矩阵(只是一个二维整数数组),并返回一个新的、更小的矩阵(去掉第一行和第一列)。
我这样声明矩阵和函数:
type MATRIX is array(INTEGER range <>, INTEGER range <>) of INTEGER;
function RemoveFirstRowCol (InMatrix: in MATRIX) return MATRIX is
然后我决定要返回的矩阵的大小:
Result_matrix: MATRIX (InMatrix'First(1) .. InMatrix'Length(1) - 1, InMatrix'First(2) .. InMatrix'Length(2) - 1);
然后我进行计算并返回 Result_matrix。
所以这是我的问题:在运行它时,我发现如果我尝试将此函数的结果返回到不是以正确大小声明的 Matrix 的任何内容,我会在运行时遇到异常。
我的问题是,我这样做对吗?在我看来,我不应该提前知道函数会在大小方面返回什么。即使声明的矩阵大于我返回的矩阵,我仍然会收到错误消息。再说一次,Ada 的整个想法是强类型,所以也许这是有道理的(我应该确切地知道返回类型)。
无论如何,我这样做是否正确,如果事先不知道返回矩阵的大小,真的没有办法使用这个函数吗?
谢谢,伊丹