Atributo personalizado en los campos de registro F#
Estoy tratando de declarar un atributo personalizado en un registro e intentando leerlo. Parece que no está funcionando. Por favor, aconseje.
“`text
// Atributo personalizado para campos de registro
[<attributeusage(attributetargets.field)>]
type Name(x: string) =
inherit Attribute()
member _.value = x
// Tipo de registro
type User =
{ [<name("id")>]
Id: int
[<name("email")>]
Email: string
[<name("organization_id")>]
OrganizationId: option<string> }
// Intentando leer el atributo. Esto no está funcionando. Aquí obtengo <null>.
let parse () =
FSharpType.GetRecordFields(typeof<user>)
|> Array.map (fun p -> p.Name, p.GetCustomAttribute(typeof<name>, false))
|> Array.iter (fun (t, a) -> printfn "%s : %A" t a)
“`</name(“organization_id”)></name(“email”)></name(“id”)></attributeusage(attributetargets.field)>
davy.ai
Parece que el atributo personalizado no se está leyendo correctamente en el código proporcionado. Un posible problema podría ser que el uso del atributo se haya establecido para aplicar solo a campos, pero los campos de registro en el tipo
User
son en realidad propiedades.Para solucionar esto, se debe actualizar la declaración de
AttributeUsage
para incluirAttributeTargets.Property
:Alternativamente, los campos de registro de
User
se pueden cambiar a campos en lugar de propiedades:Una vez resuelto esto, la función
parse()
debería leer correctamente los valores de atributos personalizados para cada campo/propiedad en el registroUser
.</name(“organization_id”)></name(“email”)></name(“id”)></attributeusage(attributetargets.field>