Record selectors (again)

Jay Nelson jay@REDACTED
Thu Jun 24 04:56:56 CEST 2004


 > Kostis Sagonas wrote:
 >  -module(rec).
 >  -export([unsafely_access_a/1]).
 >  -record(rec,{a,b}).
 >
 >  unsafely_access_a(R) ->
 >      R#rec.a.

 > Vance Shipley replied:
 > It seems to me that it's up to you to test if the argument is
 > correct or not.  Otherwise it is handled through exception handling
 > (i.e. you may want it to crash).

 > unsafely_access_a(R) when is_record(R, rec) ->
 >       R#rec.a.

Using the current compiler, the following
shorthand way provides the same safety (and is the way I
code all my record arguments now):

unsafely_access_a(#rec{a=Value}) ->
    Value.

The pattern matcher checks the record type before allowing
a successful match.  The syntax for the more equivalent
approach is:

unsafely_access_a(#rec{} = R) ->
    R#rec.a.


jay




More information about the erlang-questions mailing list