10
votes

Convertir des enregistrements aux propérultes (et à l'arrière)

J'ai une webApp erlang, basée sur MOCHIWEB et MNSIA, qui consomme et émet un JSON. Il est logique de stocker des archives en Mnésique; Cependant, Mochiweb / Mochijson nécessite des données au format proplist. Donc, je me retrouve avec une grande quantité de code de la chaudière: xxx

bien avec un seul petit enregistrement, une douleur avec beaucoup de gros enregistrements. Quelqu'un peut-il suggérer un moyen de tout ce code de la chaudière? Je suppose que j'ai besoin d'un moyen d'inspecter des champs d'un dossier de manière dynamique; Et puisque les archives sont une construction de compilation, je suppose que [en supposant que ce soit possible] cela signifie que cela signifie l'injection de code via une macro ..

merci!


0 commentaires

4 Réponses :


2
votes

Utiliser record_info (champs, foobar) Il est possible de faire quelque chose de dynamique. Enregistrez_info est également une construction de compilation de compilation afin que le nom d'enregistrement ne puisse pas être une variable, vous avez donc besoin d'une clause pour chaque enregistrement que vous souhaitez convertir.


0 commentaires

24
votes

Vous devriez être capable de faire quelque chose comme: xxx pré>

etc. p>

(ou comme macro (créant toujours une fonction cependant, la version où la macro est ? R2P (Rec, Foobar) est trop laid): P>

-define(R2P(Record), record_to_proplist(#Record{} = Rec) ->
           lists:zip(record_info(fields, Record), tl(tuple_to_list(Rec)))).

?R2P(foobar);
?R2P(foo).


2 commentaires

Nice, mais je dois encore générer record_to_proplist pour chaque enregistrement. Pensez que la bonne façon est probablement de générer ce genre de choses.


Vous pouvez trouver tous les enregistrements de votre projet avec "Rechercher. -Name" * rl "-exec grep - '-Record (' {} \; | SED 'S / -Record (([^,] *) ,. * / \ 1 / '"et auto générer un fichier en fonction de cela.