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: 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 .. p> merci! P> p>
4 Réponses :
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. P>
Vous devriez être capable de faire quelque chose comme: 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).
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.
On dirait comme EXPRECS est ce que vous recherchez: p>
Mettre en place avec l'autre réponse de Danialluna: Listes: Zip (League2: '# info -' (REC), TL (TUPLE_TO_LIST (REC))).
Le lien est mort. Veuillez mettre la réponse complète en ligne à l'avenir.
Le lien dans la réponse acceptée pour cela a été longtemps mort. P>
La réponse courte consiste à utiliser EXPRECS de ULF WIGER. P>
EXPRECS est une parse_transform dans uwiger / parse_trans < / p>
L'article sur la manière dont ces travaux sont archivés dans l'archive Web à l'adresse suivante: http://web.archive.org/web/20130729014934/http://forum.trapexit.org/viewtopic.php?p=21790 p>