2009-12-20 13 views
9

Algo como¿Es posible sobrecargar la función en F #?

let f x = log(x) 

y más tarde puedo aplicar f a la matriz, vector o un flotador.

Supongo que no es posible porque F # está estrictamente estático. ¿Algún otro patrón para superar este problema?

Gracias!

Respuesta

4

Puede utilizar la sobrecarga de operadores para tipos/clases:

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 } 

o funciones inline:

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

Véase mi respuesta a esta pregunta:

Functions with generic parameter types

En pocas palabras:

  • Puede sobrecargar miembros de una clase (pero no let-ligados funciones)
  • Puede utilizar 'inline' y los tipos 'sombrero'
  • Puede simular las clases de tipos de Haskell y explícitamente pasar diccionarios-of-métodos
  • Puede usar hacer pruebas de tipo de tiempo de ejecución desde 'obj'
Cuestiones relacionadas