Plantillas de funciones en F #
Digamos que estoy resolviendo un problema particular y se me ocurre una función
let function parameter1 ... =
a lot of adding, multiplying & so on with a lot of
literals all over the place
Ahora esta función funciona bien si mis parámetros son de tipo int. Pero en algún lugar lo necesitaré para subir a 11, necesitaré ese impulso adicional en int64 o incluso BigInteger. ¿Entonces qué hago? Copio y pego la función, cambio el nombre y busco todas las apariencias literales que hacen que el compilador piense que la función debería funcionar en int. Y esto apesta.
Hay alguna forma de hacer esto:
let greatFunction param1 param2 = (param1+1)/(param2*2)
donde param1 y param2 pueden ser cualquier combo de tipos enteros?
Editar:
Ampliando un poco en un gran consejo por kvb a continuación, se me ocurrió lo siguiente
module NumericLiteralG
let inline FromZero() = LanguagePrimitives.GenericZero
let inline FromOne() = LanguagePrimitives.GenericOne
let inline FromInt32 n =
let rec loop nIn nOut =
if nIn>0 then loop (nIn - 1) (nOut + LanguagePrimitives.GenericOne)
else nOut
loop n LanguagePrimitives.GenericZero
por lo que se vuelve un poco menos feo cuando se usa
let inline halfSquare num =
let res = num / 2G
res * res
let solve1 = halfSquare 5I
let solve2 = halfSquare 5.0
let solve3 = halfSquare 5uy
Ahora la pregunta es ¿debo usar esto? ¿Si no, porque no?