我想定义一个函数如下:
let f (a: int) (b: int) (c: int) (d: int): int =
...
是否可以在不将其作为元组的情况下缩短签名?因为我仍然希望f
有4个参数。
非常感谢。
编辑1:我认为重复int
4次是没用的,并且像let f (a, b, c, d: int): int
这样的内容实际上是不允许的。
答案 0 :(得分:13)
试试这个语法:
let g: int -> int -> int -> int -> int =
fun a b c d ->
assert false
它不会短得多,但如果你有很多这些,你可以定义type arith4 = int -> int -> int -> int -> int
并使用该名称作为g
的类型注释。
答案 1 :(得分:1)
我的OCaml很生疏,但我相信你可以通过声明自己的类型并在函数体中解压缩来实现。
type four = int*int*int*int
let myfunction (t:four) =
let a, b, c, d = t in
a + b + c + d;
你也可以这样做:
let sum4 ((a, b, c, d):int*int*int*int) =
a + b + c + d;;