1

这是我编写的代码片段:

let Foo (a : (int * int) seq) =  ();;
val Foo : seq<int * int> -> unit

let inline Bar (a : (a' * int) seq) = ();;
let Bar (a : (a' * int) seq) =
--------------^^
stdin(8,15): error FS0039: The type 'a'' is not defined
>

我的意图是Bar应该是一个函数,我可以将具有不同类型的元组传递给它,例如(string * int)or (float * int)。为什么我不能这样定义我的函数?

4

3 回答 3

4

勾号 (') 出现在类型变量之前,而不是之后(也就是说,您要使用'a,而不是a')。

此外,您不太可能需要inline在声明中使用。

于 2012-09-26T18:11:15.960 回答
2

你真的需要一个类型注释吗?这更清洁并且具有相同的类型:

let Bar a =
  for c, d in a do
    printfn "%A, %d" c d
于 2012-09-26T18:30:14.370 回答
2

您可以使用 <> 使函数显式泛型以引入泛型类型。

let Bar<'a> (a: ('a * int) seq) = ()
于 2012-09-26T18:08:29.863 回答