[erlang-questions] record with dynamic item name

Jachym Holecek freza@REDACTED
Sun Aug 28 20:13:11 CEST 2011


# Roberto Ostinelli 2011-08-28:
> is there any way to retrieve a record item whose identifier is in a variable?
>
> For instance:
> 
> -record(state, {
>     type = 1
> }).
> 
> These do not work:
> 
> Type = type,
> Val = #state.Type.
> 
> nor
> 
> #state{Type = Val}.

If you're already passing Type to the common extraction routine, perhaps you
could pass field position (#state.type) instead of field name (type) and use
element/2 to extract it. If the names are fixed, but their positions vary you
can use record_info/2 as Michael suggests.

Alternatively you could establish the horribly fragile convention of fixing
positions of "shared" fields among a family of records and wait for subtle
bugs to emerge in live systems over time (well, it doesn't have to be this
pessimistic, but...). :-)

In the most general case, I would say you're using the wrong data structure
for the job or your APIs need a slight redesign -- is the code where you
need this publically available somewhere by any chance?

BR,
	-- Jachym



More information about the erlang-questions mailing list