Кортежи переменной длины в F#

Можно ли написать функцию для приема кортежа переменной длины? Я пытаюсь написать метод, который можно вызвать так:

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

РЕДАКТИРОВАТЬ: Может ли это быть интерпретировано как вызов функции с параметрами? Или метод должен быть написан на C#:

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

2 ответа

Решение

Нет - кортежи по определению не имеют переменной длины, и для написания такой функции вам понадобится что-то вроде шаблонного метапрограммирования в C++ - а в F# такого нет; let inline там вам тоже не помогут.

Конечно, если вы возьмете вместо этого список, он не будет сильно отличаться:

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))

тогда как функции с привязкой не могут.

Другие вопросы по тегам