F# f中的变长元组#

F# f中的变长元组#,f#,F#,是否可以编写一个函数来接受长度可变的元组?我正在尝试编写一个方法,可以这样调用: let a = sum(1,2) let b = sum(1,2,3) 编辑:是否可以将其解释为带有参数的函数调用?或者该方法是否需要用c#编写: 定义中的元组不是可变长度,而编写这样的函数,你需要像C++中的模板元编程之类的东西,而F中没有这样的东西。代码>让内联在这方面也帮不了你 当然,如果你选择一个列表,它看起来不会有太大的不同: sum[1; 2] sum[1; 2; 3] @PavelMineav是对

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

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


定义中的元组不是可变长度,而编写这样的函数,你需要像C++中的模板元编程之类的东西,而F中没有这样的东西。代码>让内联在这方面也帮不了你

当然,如果你选择一个列表,它看起来不会有太大的不同:

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

@PavelMineav是对的,你不能这样做,但请注意,成员可能会超载,这是一个很好的例子

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绑定函数不能。

对:我对“可变长度元组”的定义基本上是一个“列表”。-)但列表的所有元素都必须具有相同的类型,而元组的每个元素都可以具有不同的类型。为了实现列表的这种功能,您可能希望为列表的每个感兴趣的类型创建一个有区别的联合类型,并使列表包含该联合类型。
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))