record field names
Ulf Wiger (AL/EAB)
ulf.wiger@REDACTED
Wed Sep 28 09:29:50 CEST 2005
Interestingly, in sys_pre_expand.erl, you find the
following code and comment:
%% Expand a call to record_info/2. We have checked that it is not
%% shadowed by an import.
record_info_call(Line, [{atom,_Li,Info},{atom,_Ln,Name}], St) ->
case Info of
size ->
{{integer,Line,1+length(record_fields(Name, St))},St};
fields ->
{make_list(field_names(record_fields(Name, St)), Line),St}
end.
Apparently, someone had envisioned a way to import a
record_info/2 function. From where, one might wonder?
/Uffe
> -----Original Message-----
> From: Mats Cronqvist [mailto:mats.cronqvist@REDACTED]
> Sent: den 16 september 2005 17:05
> To: Ulf Wiger (AL/EAB)
> Cc: erlang-questions@REDACTED
> Subject: Re: record field names
>
>
> name clashes? surely you can't have a real record_info/2 function?
>
> mats
>
> Ulf Wiger (AL/EAB) wrote:
> > In order to eliminate name clashes, why not
> >
> > Module:module_info({record, Rec, fields})
> >
> > /Uffe
> >
> >
> >>-----Original Message-----
> >>From: owner-erlang-questions@REDACTED
> >>[mailto:owner-erlang-questions@REDACTED]On Behalf Of Mats
> Cronqvist
> >>Sent: den 16 september 2005 16:22
> >>To: erlang-questions@REDACTED
> >>Subject: record field names
> >>
> >>
> >> feels like this is an faq, but i can't find it in the archive.
> >>
> >> according to the reference manual:
> >> "To each module using records, a pseudo function is added
> >>during compilation
> >>to obtain information about records:
> >>record_info(fields, Record) -> [Field]
> >>record_info(size, Record) -> Size"
> >>
> >> now, as i understand it, there is no function, just
> >>textual substitution
> >>(like a macro).
> >>
> >> but why not? if there was a real, exported function
> >>record_info/2 (just like
> >>module_info), one could do a lot of cool things.
> >>
> >> such as turning a record into a tagged tuple;
> >>
> >>readable_rec(Module,Rec) ->
> >>
> >>lists:zip(Module:record_info(fields,element(1,Rec)),tl(tuple_t
> >>o_list(Rec))).
> >>
> >> or write a tool to check that all modules using a certain
> >>record agree on its
> >>definition.
> >>
> >> mats
> >>
>
More information about the erlang-questions
mailing list