Можно ли сделать перегрузку функции в F #? - PullRequest
9 голосов
/ 20 декабря 2009

Что-то вроде

let f x = log(x)

и позже я могу применить f к матрице, вектору или числу с плавающей точкой.

Полагаю, это невозможно, поскольку тип F # строго статический. Любые другие скороговорки, чтобы преодолеть эту проблему?

Спасибо!

Ответы [ 2 ]

14 голосов
/ 20 декабря 2009

Смотрите мой ответ на этот вопрос:

Функции с общими типами параметров

Кратко:

  • Вы можете перегружать члены класса (но не функции с ограниченным доступом)
  • Вы можете использовать типы inline и hat
  • Вы можете моделировать классы типов на Haskell и явно передавать словари методов
  • Вы можете использовать приведение типов тестов во время выполнения из 'obj'
4 голосов
/ 20 декабря 2009

Вы можете использовать перегрузку операторов для типов / классов:

type Fraction = 
  { n : int; d : int; }
  static member (+) (f1 : Fraction, f2 : Fraction) =
    { n = f1.n * f2.d + f2.n * f1.d; d = f1.d * f2.d }

или встроенные функции:

> let inline fi a b = a+b;;
val inline fi :
   ^a ->  ^b ->  ^c when ( ^a or  ^b) : (static member ( + ) :  ^a *  ^b ->  ^c)
...