如何将二维数组传递给F#中的函数?

时间:2013-05-04 07:52:17

标签: arrays function multidimensional-array f# arguments

我正在尝试在F#中创建一个函数,它将整数的二维数组(9乘9)作为输入,然后打印其内容。以下代码显示了我所做的:

let printMatrix matrix=
    for i in 0 .. 8 do
        for j in 0 .. 8 do
            printf "%d " matrix.[i,j]
        printf "\n"

问题是F#不会自动推断矩阵的类型,它会给我以下错误:“运算符'expr。[idx]'已被用作基于信息的不确定类型的对象在此程序点之前。考虑添加其他类型约束“

我尝试在函数的定义中使用类型注释,但我认为我做错了。知道如何克服这个问题吗?

2 个答案:

答案 0 :(得分:6)

将其更改为

let printMatrix (matrix:int [,])=
    for i in 0 .. 8 do
        for j in 0 .. 8 do
            printf "%d " matrix.[i,j]
        printf "\n"

这是由于F#类型的infrence算法如何工作

答案 1 :(得分:1)

类型推断算法并不真正喜欢括号运算符,因为它无法猜测哪个类型是对象。

解决方法是将矩阵赋予编译器知道类型的函数,在该示例中,Array2D.get与括号运算符执行相同的操作。它知道它是一个int矩阵,因为"%d"在printf上

let printMatrix matrix =
    for i in 0..8 do
        for j in 0..8 do
            printf "%d" <| Array2D.get matrix i j 
        printf "\n"