我想用一个程序测试一些矩阵。每个矩阵应该作为一个矩阵传递,类似于:
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]);
所以我得到了矩阵的错觉和可读性。谢谢大家!
如果您使用稍微不同的TMatrix声明,实际上有可能做到这一点,但恕我之言,它不会增加代码的可读性:
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)));
您不能对常量或开放数组为所欲为。TMatrix
是一个动态数组你不能让常数是动态数组。矩阵是二维的,但是开放数组不能嵌套。不能有一个打开数组的打开数组。如果这只是一个向量,即一维,那么你确实可以使用开放数组。然而,因为你有一个二维矩阵,开放数组不能帮助。
你需要使用一个在运行时初始化的变量。如果您确实有一个常量,那么在initialization
部分中可以很容易地做到这一点。