Matching elements of records
Ulf Wiger (AL/EAB)
ulf.wiger@REDACTED
Thu Oct 28 10:28:04 CEST 2004
On Oct 28 2004, 02:53, Richard A. O'Keefe wrote:
>
> I note that in the other functional programming languages I use,
> *only* the
> <variable> = <pattern>
> <variable> @ <pattern>
> <variable> as <pattern>
> form is available, not the "reversed" form with the variable
> on the right.
> I would find the "reversed" form rather confusing and
> unpleasant to read.
>
After some digging, I was able to locate a previous post
by Robert Virding, who also has strong opinions on style. ;-)
On this particular issue, the two of you seem to be in
strong disagreement.
http://www.erlang.org/ml-archive/erlang-questions/200011/msg00200.html
I've pasted in an extract from that post.
To keep Robert from shouting at me, I changed my own coding
style to match his (on this point). Perhaps it's an acquired
taste, because I now agree with him that it's better to put
the alias on the right of the expression.
(:
Regards,
Uffe
=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=
Yes, I know, '=' is used in three contexts:
Explicit match operator
Couple record field name to value/pattern
Aliases in patterns.
The trouble is that there is a limited number of symbols on the
keyboard so there will be overloading.
> ugly() ->
> B = #type{name = 3},
> fun(A = #type{name = Value}) -> Value end(B).
>
> ugly2() ->
> B = #type{name = 3},
> case B of
> A = #type{name = Value} -> Value
> end.
I personally can't conceive why anyone would write aliases in patterns
in that direction, I always do it the other way:
ugly() ->
B = #type{name = 3},
fun(#type{name = Value}=A) -> Value end(B).
Writing it this way means you have the same semantics as for a normal
explicit match, take the value of "A" and match it with the record ...
This then only gives two uses.
I was much to lenient with the syntax and didn't realise what people
would do with it. Though after all these years you would think that I
would learn. It ought to be changed. So remember:
ALWAYS WRITE PATTERN ALIASES AS <PATTERN>=<VAR>!!
Hmm, maybe lint should warn? :-)
Robert
=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=
More information about the erlang-questions
mailing list