Digamos que tengo una función que hace algo bastante complicado y se implementa con la ayuda de subfunciones. Para facilitar las cosas, en lugar de tuplas me gustaría utilizar algunas estructuras intermedias que son privadas para la implementación de esta función.¿Es posible declarar un tipo en el alcance de la función en F #?
No quiero que la declaración de estas estructuras se filtre afuera. Así que quiero algo como esto:
let someComplexFun p =
type SomeRecord = {i:int; x:int; y:int;}
type SomeOtherRecord = {...}
let innerFunctionA (x:SomeRecord) = ...
let innerFunctionB (x:SomeOtherRecord) = ...
...
lo intenté, pero, por supuesto, el compilador no vamos a hacer esto. Miré la documentación y no puedo ver en ningún lugar rápidamente que los tipos deben declararse a nivel de módulo.
En LISP, por ejemplo, parece que todo es completamente legal, por ejemplo .:
(defun foo (when)
(declare (type (member :now :later) when)) ; Type declaration is illustrative and in this case optional.
(ecase when
(:now (something))
(:later (something-else))))
Por lo tanto, me estoy perdiendo algo? ¿Es esto posible si F # en absoluto?
tal vez las funciones son de primera clase pero las clases no son;) ... no, es realmente extraño, ¿por qué no compilar tal cosa en una clase anónima? Pero la solución es bastante fácil ya que Komrade P. escribió. Creo que si tu función es tan larga que necesitas dar tipos internos, entonces tal vez deberías pensar en refactorizar de todos modos – Carsten