f#中的可变长度元组

时间:2009-07-16 05:39:38

标签: f#

是否可以编写一个函数来接受可变长度的元组?我正在尝试编写一个可以这样调用的方法:

let a = sum(1,2)
let b = sum(1,2,3)
编辑:是否可以将其解释为带参数的函数调用?或者该方法是否需要用c#编写:

double sum(params object[] double) {
    ...
}

2 个答案:

答案 0 :(得分:9)

No-tuples根据定义不是可变长度,并且要编写这样的函数,你需要像C ++中的模板元编程一样 - 而且F#中没有这样的东西; let inline也不会帮助你。

当然,如果你改用一个列表,它看起来就不会那么不同了:

sum[1; 2]
sum[1; 2; 3]

答案 1 :(得分:4)

@PavelMineav是对的,你不能这样做,但请注意成员可以重载,la

type Foo() =
    member this.sum(x,y) = x + y
    member this.sum(x,y,z) = x + y + z

let foo = new Foo()
printfn "%d" (foo.sum(1,2))
printfn "%d" (foo.sum(1,2,3))

而let-bound函数则不能。