[erlang-questions] simplified attribute declaration

Vlad Dumitrescu <>
Fri Mar 19 14:18:48 CET 2010


On Fri, Mar 19, 2010 at 13:23, Kostis Sagonas <> wrote:
> What is really happening is that attributes which take just one argument do
> not need to be enclosed in parentheses. On the other hand, attributes with
> more than one argument (read: whenever there is a ',' involved, as in the
> case of -define above) need to be enclosed in parentheses.

Why?

I tried it properly with the following module

-module test.
-export [test/1].
-import lists, [reverse/1].
-record x, {a=3}.

test(X) ->
	{#x{a=4}, reverse(X)}.

and it works just fine to compile and run it, giving the correct result.

The only other attributes that accept two arguments are -module whith
parameters, -file and -define. The first works too and the other two
don't because they are both handled by epp (which has the parentheses
hardcoded in its scanner/parser). I don't see why -file shouldn't work
too and in the case of -define the only problem I can see is in the
case of macro definitions that aren't well-formed expressions.

best regards,
Vlad


More information about the erlang-questions mailing list