You could use <font face="courier new, monospace">record_info(fields, Record)</font> to get an ordered list of the record fields and use that to find the tuple index of the requested field.  Although the fields are returned in order, the documentation does not specify that as far as I've seen, only that it returns a list of the fields.  A nasty bug would result if in a future release it stopped returning the fields in order, or even better, if for some records or in some situations it didn't return the fields in order.  Hard coding your own field index table would get around this potential problem.<br>
<br>Here's an example:<br><br><blockquote style="margin:0 0 0 40px;border:none;padding:0px"><font face="courier new, monospace">-record(r, {r1="1", r2="2", r3="3"}).<br>t(F, NewV) -><br>
    R = #r{},<br>    OldV = get_value(F, R),<br>    R1 = set_value(F, R, NewV),<br>    ?debugFmt("R=~p, R1=~p, Old=~p",[R, R1, OldV]).<br><br>get_value(F, R)    -> element(field_index(F), R).<br>set_value(F, R, V) -> setelement(field_index(F), R, V).<br>
<br>field_index(F) -> index(F, record_info(fields, r), 2).<br><br>index(M, [M|_], I) -> I;<br>index(M, [_|T], I) -> index(M, T, I+1).</font></blockquote><br>Calling:<blockquote style="margin:0 0 0 40px;border:none;padding:0px">
<div><font face="courier new, monospace">t(r1, new) </font></div></blockquote><div>prints out: </div><blockquote style="margin:0 0 0 40px;border:none;padding:0px"><div><font face="courier new, monospace">R={r,"1","2","3"}, R1={r,new,"2","3"}, Old="1"</font></div>
</blockquote><div><br></div><div><br></div>