Hi,
How can I evaluate expressions such as: “X = P#person.age.” using something like erl_eval:exprs and friends?
Sort of like this (non-working code):
my_eval() ->
PersonDef = {attribute,38,record,
{person,[{record_field,38,{atom,38,name}},
{record_field,38,{atom,38,age}}]}},
RecordDefs = [{person, 38, PersonDef}],
Person = #person{name = "John", age = 30},
Bindings0 = erl_eval:new_bindings(),
Bindings = erl_eval:add_binding('P', Person, Bindings0),
eval_exprs("X = P#person.age.", Bindings, RecordDefs).
eval_exprs(Expression, Bindings, RecordDefs) ->
%% Parse the expression
{ok, Tokens, _} = erl_scan:string(Expression),
{ok, [Expr]} = erl_parse:parse_exprs(Tokens),
%% Evaluate the expression
case erl_eval:exprs([Expr], Bindings, RecordDefs) of
{value, Value, NewBindings} -> {Value, NewBindings};
Error -> Error
end.