如何将常量值矩阵作为过程调用的参数传递

时间:2011-12-04 11:20:55

标签: delphi multidimensional-array

我想通过一个程序测试一些矩阵。每个矩阵都应该作为矩阵传递,如:

type TMatrix = array of array of integer;
procedure test_kernel (mat: TMatrix);
....
test_kernel ([[1, 2], [1, 3]]); // <== does not compile

我找不到正确的语法来正确执行此操作(也尝试使用圆括号)。有谁知道如何将常量值矩阵作为过程参数传递?它有可能吗?

修改

我想要的是不可能的,我决定使用:

type TMatrix = array of integer;
procedure test_kernel (rows, cols: integer; mat: TMatrix);
....
test_kernel (2, 2, [1, 2, 
                    1, 3]); 

所以我得到了矩阵的错觉和可读性。谢谢大家!

2 个答案:

答案 0 :(得分:4)

如果使用稍微不同的Matrix声明,实际上有可能这样做,但恕我直言,它不会增加代码的可读性:

type
  TVector = array of integer;
  TMatrix = array of TVector;
procedure test_kernel (mat: TMatrix);
....
test_kernel(TMatrix.Create(TVector.Create(1, 2), TVector.Create(1, 3)));

答案 1 :(得分:2)

使用常量或打开数组无法实现所需。 TMatrix是一个动态数组,你不能拥有动态数组的常量。矩阵是2D但是打开的数组不能嵌套。你不能拥有一个开放数组的开放数组。如果这只是一个向量,即1维,那么你确实可以使用开放数组。但是,由于你有一个2D矩阵,开放的数组无济于事。

您需要使用在运行时初始化的变量。如果你真的有一个常量,你可以在initialization部分轻松地做到这一点。