4

我正在尝试在 F# 中创建一个函数,该函数将一个二维整数数组(9 x 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]' 已被用于基于此程序点之前的信息的不确定类型的对象。考虑添加更多类型约束”

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

4

2 回答 2

6

Change it to

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

This is due to how the F# type infrence algorithm works

于 2013-05-04T07:55:17.717 回答
1

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

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

let printMatrix matrix =
    for i in 0..8 do
        for j in 0..8 do
            printf "%d" <| Array2D.get matrix i j 
        printf "\n"
于 2015-03-22T22:51:55.963 回答