2009-09-06 8 views
5

Existe-t-il un moyen d'utiliser des enregistrements directement dans erl? Peu importe ce que j'essaie, ça dit toujours qu'on ne peut pas trouver le disque. J'essaie de faire des transactions mnésiques et je ne peux pas aller trop loin sans mes dossiers. Toute aide est grandement appréciée - merci!Records dans Erl (question Erlang)

Répondre

13

Oui, utilisez help() et trouvez ces commandes dans le shell.

rd(R,D) -- define a record 
rf()  -- remove all record information 
rf(R)  -- remove record information about R 
rl()  -- display all record information 
rl(R)  -- display record information about R 
rp(Term) -- display Term using the shell's record information 
rr(File) -- read record information from File (wildcards allowed) 
rr(F,R) -- read selected record information from file(s) 
rr(F,R,O) -- read selected record information with options 

Ce sont une bidouille dans la coquille, ils vous permettent de charger les définitions de disques utilisés dans les modules quand ils ont été compilés. Utilisez la commande rr pour le charger depuis votre module. Rappelez-vous que ceux-ci ne sont disponibles que pour le shell interactif à utiliser.

+1

Une petite note à ajouter: Les disques n'existent pas vraiment ... ce ne sont que des tuples étiquetés. Par exemple. dites que vous définissez -record (state, {sessions}). alors quand vous utiliserez #state {session = N}, ce sera en fait le tuple {state, N}. De même, si vous tapez seulement #state {}, ce sera {state, undefined}. Sachant cela, vous pouvez facilement "fausser" les enregistrements par exemple lorsque vous travaillez avec Mnesia dans le shell. Bonne chance. –

3

Comment voulez-vous dire? Dans la coquille, alors c'est comme Christian a écrit. Si vous voulez dire dans un module, vous devez encore définir les enregistrements avant de pouvoir les utiliser. Voir les documents erlang, en ligne au http://erlang.org/doc/, pour une description sur la façon de procéder. Ils ne sont qu'une construction de compilation, ils n'existent donc pas en tant que tels.