使用erlang实现动态替换字符串中的变量

本文介绍如何使用Erlang内置工具解析字符串为Token,再将这些Token转换成可以执行的表达式,并最终执行该表达式。示例中演示了具体的函数定义及调用过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

通过erlang,我们可以使用
{ok, Ts, _} = erl_scan:string(String).
来获取Tokens,然后调用:
{ok, Expr} = erl_parse:parse_exprs(Ts).
转换成可以执行的表达式,之后通过
erl_eval:exprs(Expr, Binding).
来执行表达式。
实验步骤如下:

1> F =fun(Str,Binding) ->
1> {ok,Ts,_} = erl_scan:string(Str),
1> io:format("~p~n", [Ts]),
1> Ts1 = case lists:reverse(Ts) of
1> [{dot,_}|_] -> Ts;
1> TsR -> lists:reverse([{dot,1} | TsR])
1> end,
1> io:format("~p~n", [Ts1]),
1> {ok,Expr} = erl_parse:parse_exprs(Ts1),
1> io:format("~p~n", [Expr]),
1> erl_eval:exprs(Expr, Binding) end.
#Fun<erl_eval.12.113037538>
2> F("lists:concat(['haha',B,'ok!']).",[{'B',23}]).
[{atom,1,lists},
{':',1},
{atom,1,concat},
{'(',1},
{'[',1},
{atom,1,haha},
{',',1},
{var,1,'B'},
{',',1},
{atom,1,'ok!'},
{']',1},
{')',1},
{dot,1}]
[{atom,1,lists},
{':',1},
{atom,1,concat},
{'(',1},
{'[',1},
{atom,1,haha},
{',',1},
{var,1,'B'},
{',',1},
{atom,1,'ok!'},
{']',1},
{')',1},
{dot,1}]
[{call,1,
{remote,1,{atom,1,lists},{atom,1,concat}},
[{cons,1,
{atom,1,haha},
{cons,1,{var,1,'B'},{cons,1,{atom,1,'ok!'},{nil,1}}}}]}]
{value,"haha23ok!",[{'B',23}]}
3>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值