Кортежи переменной длины в 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))
тогда как функции с привязкой не могут.