Inferenza del tipo F # nelle stringhe di formato
-
03-07-2019 - |
Domanda
Come è possibile che F # esamini le stringhe di formato in fase di compilazione per determinare che x abbia type int nella seguente definizione?
let foo x = sprintf "%d" x`?
È codificato nella lingua o qualcuno potrebbe scrivere il proprio "mio_print"? funzione che utilizza stringhe di formato con una sintassi diversa? Ad esempio:
let foo x = my_print "{integer}" x
Soluzione
Puoi leggerne un po 'al riguardo in 6.4.17 (formati' printf ') qui , ma brevemente
- è integrato nella lingua
- i letterali di stringa possono essere effettivamente "forzati" nel tipo strano "Formato"
- printf e gli amici si aspettano un primo argomento del tipo Format, facendo accadere la coercizione
Il risultato netto è che puoi creare le tue funzioni in stile printf, ma devi usare gli stessi formati% s, poiché quella roba è integrata.
Altri suggerimenti
Here è un esempio di come è possibile creare il proprio printf- funzioni di stile in F #. Non puoi modificare gli identificatori di formato (ad es. & Quot;% d "), ma puoi sfruttare gli specificatori esistenti per creare funzioni di formattazione delle stringhe aggiuntive che il compilatore digiterà check.