2009-07-16 69 views
5

是否可以編寫函數來接受可變長度的元組?我試圖寫一個可以這樣調用的方法:f中的可變長度元組#

let a = sum(1,2) 
let b = sum(1,2,3) 

編輯:它可以解釋爲帶有參數的函數調用?或將方法需要在C#中寫入:

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

回答

8

否 - 元組是按照定義不能變長,並寫這樣你需要像在C++模板元編程的功能 - 有ISN」在F#中這樣的事情; let inline也不會幫助你。

當然,如果你把一個列表,而不是,它不會顯得太大區別:

sum[1; 2] 
sum[1; 2; 3] 
+0

右:我對「可變長度元組」的定義基本上是一個「列表」。 ;-) – peSHIr 2009-07-16 06:24:20

4

@PavelMineav是正確的,你不能這樣做,但要注意,成員可以被重載, a 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函數不能。