2009-12-02 10 views
8

¿Hay alguna forma de definir un literal público (const público en C#) en un tipo? Aparentemente, los enlaces en tipos deben ser privados y el atributo Literal no se puede aplicar a los miembros.F # - literal público

Respuesta

9

Utilice el atributo [< Literal>]. Esto hace la magia que estás buscando. Además, al poner el atributo literal en un valor como una cadena, se puede usar dentro de la coincidencia de patrones. Por ejemplo:

// BAD - introduces new value named 'Name' 
let Name = "Chris Smith" 

match Console.ReadLine() with 
| Name -> printfn "You entered my name! %s" Name 
| _ -> printfn "You didn't enter my name" 

// Good - uses the literal value, matches against the value Name 
[<Literal>] 
let NameLiteral = "Chris Smith" 
match Console.ReadLine() with 
| NameLiteral -> "You entered my name!" 
| _ -> printfn "You didn't enter my name. 

Editar: Veo que la pregunta se refiere a cómo poner estos en clases personalizadas (y no en módulos). No sé si puedes exponer un campo público const/public readonly dentro de F #, lo investigaré.

+0

Gracias. Sí, la clave es 'pública'. – Daniel

+0

No estoy seguro de por qué esta respuesta sigue recibiendo votos, ya que no responde a la pregunta (un hecho que Chris incluso reconoce). – Daniel

+0

Mi teoría es que las personas a menudo votan cuando encuentran algo interesante, incluso si no responde la pregunta. – gradbot