2

如果我声明这个 F# 函数:

let extractColumn col (grid : List<Map<string, string>>) =
    List.map (fun row -> row.[col]) grid

编译器抱怨:

错误 FS0752:运算符 'expr.[idx]' 已根据此程序点之前的信息用于不确定类型的对象。考虑添加更多类型约束

为 lambda 的row参数添加类型注释可以修复它:

let extractColumn col (grid : List<Map<string, string>>) =
    List.map (fun (row : Map<string, string>) -> row.[col]) grid

为什么不能rowextractColumn函数的grid参数中获取类型?

4

1 回答 1

8

F# 的类型推断从左到右和从上到下工作。

grid部件中不提供类型List.map (fun row -> row.[col])

使用管道运算符|>

let extractColumn col (grid : Map<string, string> list) =
    grid |> List.map (fun row -> row.[col])

使您的示例按预期工作。

于 2013-06-27T20:56:09.913 回答