Кортежи переменной длины в f # - PullRequest
6 голосов
/ 16 июля 2009

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

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

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

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

Ответы [ 2 ]

9 голосов
/ 16 июля 2009

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

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

sum[1; 2]
sum[1; 2; 3]
4 голосов
/ 16 июля 2009

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...