[erlang-questions] Defining records using macros
Richard Carlsson
carlsson.richard@REDACTED
Thu Jul 18 09:33:59 CEST 2013
On 2013-07-18 09:15 , Yash Ganthe wrote:
> -define(REC_DEFINE(Type),
>
> -record(Type, {
>
> id
>
> ,val
>
> }). %% The . is an essential part of record definition
>
> ). %% Complains with syntax error: syntax error before: ')'
>
> My intention is to use a macro for defining records.
>
> ?REC_DEFINE(my_rec).
>
> Is there an escape character that the preprocessor can be give for the dot?
The preprocessor (just like the compiler) works on units of whole
"forms", i.e., dot-terminated token sequences. Since the define must
also be a whole form, it will end at the first dot token and there is no
way to escape it.
But you need to write your macro instantiations with a dot terminator
anyway (just as you did above, in fact), otherwise the preprocessor
won't have a unit to work on. Thus, you don't need to supply the dot in
the definition, and the following works:
-module(foo).
-export([f/0]).
-define(R(T), -record(T, {a, b})).
?R(foo).
?R(bar).
f() ->
#foo{a=A1,b=B1} = #foo{},
#bar{a=A2,b=B2} = #bar{}.
/Richard
More information about the erlang-questions
mailing list