Hice un par de experimentos con el compilador F # y aquí hay algunas de mis observaciones. Si desea crear IL literal, debe colocar el valor marcado como Literal
dentro de un módulo. Por ejemplo así:
module Constants =
[<Literal>]
let Num = 1
Como nota lateral, hice una búsqueda rápida a través del # especificación F y parece que literales pueden ser muy útiles para la coincidencia de patrones, porque se puede utilizar como un patrón (como se siempre y cuando comienzan con una letra mayúscula):
open Constants
match 1 with
| Num -> "1"
| _ -> "other"
Ahora, la pregunta es, ¿por qué Literal
no se comporta como se puede esperar cuando se coloca dentro de una declaración de tipo. Creo que la razón es que la declaración let
dentro de una declaración de tipo F # no puede ser pública y solo será visible dentro de la clase/tipo. Creo que tanto C# como F # incorporan valores literales cuando los usas y esto también se hace dentro de las declaraciones de tipo. Sin embargo, dado que el literal no puede ser público, no hay motivo para generar el campo IL literal
, porque nadie podría acceder a él.
Hice esta pregunta - http://stackoverflow.com/questions/1834923/f-public-literal - y Chris Smith indicó que no es posible. – Daniel