Je suis un peu confus sur quel fichier Quel type de code est approprié de mettre dans ces fichiers Si l'enregistrement doit être utilisé dans plusieurs modules, sa définition doit être placée dans un fichier d'en-tête (avec suffixe .hrl) incluse dans les modules. P>
blockQuote>
En conséquence, j'ai formé l'habitude de le faire dans mon code. Cependant, j'aime mettre des choses telles que des fonctions d'instanciation et de comparaison pour des enregistrements, ainsi que des définitions de type, dans mes en-têtes également (puisque c'est le genre de chose que je ferais dans c). Est-ce mauvais forme? Les types doivent-ils être exportés à partir d'un fichier .hrl code> doit être utilisé pour. Je crois comprendre que les fichiers
.hrl code> peuvent contenir n'importe quel code Erlang valide et que l'utilisation de la directive
-include code> insérer essentiellement le code dans le
.hrl code>. fichier dans n'importe quel module qui comprend. p>
.hrl code>, alors? Les règles de programmation d'Erlang indiquent les éléments suivants en matière de registres: p>
.erl code> plutôt, même s'ils sont utilisés dans plusieurs modules? Il semble n'y avoir aucune documentation sur les meilleures pratiques concernant les en-têtes Erlang disponibles. P>
3 Réponses :
Comme c, l'instruction include ajoute littéralement le contenu du fichier fourni dans le fichier ERL. Par conséquent, mettre tout code réel dans les fichiers HRL entraînera la copie de ce code partout que vous l'inclurez. Cela conduirait à une duplication inutile de la fonctionnalité dans chaque module Erlang. P>
Je placerais tout code Erlang réel dans son propre module ERL, ainsi que toutes les définitions d'enregistrement, les spécifications de type ou les macros courantes dans les fichiers HRL. Les définitions d'enregistrement et les spécifications de type ne sont pas compilées dans les fichiers binaires. Ils sont donc sans danger pour inclure dans plusieurs fichiers. P>
J'utilise des fichiers HRL pour stocker divers appareils à utiliser dans mes tests de l'unité. Je n'aime pas les utiliser dans le code de production réel pour quoi que ce soit. Avoir la même fonction importée dans différents emplacements, il est difficile de raisonner sur le code. Il est plus préférable de simplement avoir ce code dans un module séparé et de l'exporter explicitement. Les types peuvent également être exportés explicitement avec la directive -export_type. P>
Je n'aime même pas partager des enregistrements avec elle (même si c'est le seul moyen de partager des archives). Pour cela, je préfère avoir un module ne gérer que cette méthode avec des fonctions d'obtention et de définition appropriées. Les enregistrements partagés sont une catastrophe en attente de se produire et rend les mises à niveau de code plus délicieuses. P>
En bref, ne les utilisez pas pour rien d'important. P>
Généralement, vous mettez des choses dans un Comme le fichier Include est directement inséré dans le fichier incluant, tout code contenu dans celui-ci sera dupliqué dans chaque module qui comprend. Vous ne voulez généralement pas faire cela. P> .hrl code> que vous souhaitez partager entre les modules, généralement les définitions d'enregistrement et les macros. Les choses qui sont censées être purement locales à un module que vous ne mettriez pas dans un fichier
.hrl code>. Donc, une définition d'enregistrement purement locale, par exemple l'état local d'un serveur, n'irait pas dans un
.hrl code> mais uniquement dans le module définissant le serveur. Même avec les définitions de macro. Vous devriez toujours éviter inutilement l'exposition des informations internes. P>