Records
Records are tuples with the record name as first element and the rest
of the fields in order exactly like "normal" Erlang records. As with
Erlang records the default default value is 'undefined
.
(defrecord name
field
(field default-value)
... )
The record defined above will create access functions/macros for creation
and access fields. The make
, match
and set
forms takes
optional argument pairs field-name value
to get non-default values.
E.g. for the record:
(defrecord person
(name '"")
(address '"")
age)
We have:
(make-person {{field value}} ... )
(match-person {{field value}} ... )
(is-person r)
(fields-person)
(emp-person {{field value}} ... )
(set-person r {{field value}} ... )
(person-name r)
(person-name)
(set-person-name r name)
(person-age r)
(person-age)
(set-person-age r age)
(person-address r)
(set-person-address r address)
Examples
(make-person name "Robert" age 54)
Will create a new person record with the name
field set to
"Robert"
, the age
field set to 54
and the address field set
to the default ""
.
(match-person name name age 55)
Will match a person
with age
55
and bind the variable
name
to the name
field of the record. Can use any variable name
here.
(is-person john)
Test if john is a person
record.
(emp-person age '$1)
Create an Ets Match Pattern for record person
where the age
field is set to $1
and all other fields are set to _
.
(person-address john)
Return the address
field of the person
record john
.
(person-address)
Return the index of the address
field of a person
record.
(set-person-address john '"back street")
Sets the address
field of the person
record john
to
"back street"
.
(set-person john age 35 address '"front street")
In the person
record john set the age
field to 35
and the
address
field to "front street"
.
(fields-person)
Returns a list of fields for the record. This is useful for when
using LFE with Mnesia, as the record field names don't have to be
provided manually in the create_table
call.