Diciamo che ho una funzione che fa qualcosa di abbastanza complicato e che è implementata con l'aiuto di sottofunzioni. Per semplificare le cose, invece di tuple mi piacerebbe utilizzare alcune strutture intermedie che sono private per l'implementazione di questa funzione.È possibile dichiarare un tipo nell'ambito della funzione in F #?
Non voglio che la dichiarazione di queste strutture fuoriescano. Quindi voglio qualcosa di simile:
let someComplexFun p =
type SomeRecord = {i:int; x:int; y:int;}
type SomeOtherRecord = {...}
let innerFunctionA (x:SomeRecord) = ...
let innerFunctionB (x:SomeOtherRecord) = ...
...
Ho provato, ma ovviamente il compilatore non mi permette di fare questo. Ho esaminato la documentazione e non vedo da nessuna parte che i tipi debbano essere dichiarati a livello di modulo.
in Lisp, per esempio, sembra che è tutto completamente legale, per es .:
(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))))
Così, mi sto perdendo qualcosa? Questo è possibile se F # a tutti?
forse le funzioni sono di prima classe ma le classi non lo sono;) ... no è davvero strano - perché non compilare una cosa del genere in una classe anonima? Ma la soluzione è abbastanza facile come ha scritto Komrade P. Penso che se la tua funzione è così lunga che devi dare i tipi interni allora forse dovresti pensare ad alcuni refactoring in ogni caso – Carsten