我有匿名功能:
fun x -> x;;
- : 'a -> 'a = <fun>
如您所见,此函数接受任何类型的参数。我想指定具体类型,比如说int。 我知道我可以使用类型规范注释函数,但不知道它的语法。
获得对此语法的一些引用并使用此类注释扩展此示例会很有帮助。
感谢。
答案 0 :(得分:3)
# fun (x: int) -> x;;
- : int -> int = <fun>
#
这有效的原因是
函数参数指定为模式。
patttern的另一种选择是:
(pattern:typexpr)
模式语法在Section 6.6 of the OCaml manual中给出。
答案 1 :(得分:2)
最常见的形式是:
(fun x -> x : int -> int)
由于fun x -> x
本身就是一个值,因此它可以使用类型进行注释,就像任何其他表达式一样。实际上,在这种类型的注释中你可以省略int
之一,因为另一个可以由编译器推断:
(fun x -> x : int -> 'a)
或
(fun x -> x : 'a -> int)
所有结果都会导致:
- : int -> int = <fun>
这也表明类型注释中的'a
与签名中的'a
具有不同的含义。在类型注释中,它代表“我不在乎,你决定”。这就是为什么类型注释的正确名称是类型约束的原因,因此您不是用类型注释表达式,而是为类型推理系统提供额外的约束。在这个例子中,你说的是:我有这个表达式,请推断它的类型,给它一个返回int
的函数。
此外,您可以使用_
而不是类型变量,就像对普通变量执行此操作一样:
(fun x -> x : _ -> int)
结果将是相同的。