是否有可能以某种方式通过名称检索变量值(名称表示为字符串)?
% we are calling foo function as foo(3)
foo(Param) ->
Var1 = Param * 2,
% some magic code here which can evaluate
% "Var1" string to Var1's value (6)
ok.
我想实现(如果可能的话)某种记录器宏,比如
Param = 3*4,
% This should write "My parameter value is 12" to log
?LOG("My parameter value is $Param").
感谢。
答案 0 :(得分:1)
记录的常用方法是使用格式化字符串和参数列表。但是,通过使用解析变换,您的想法是可以实现的。
答案 1 :(得分:0)
对于您可以使用的玩具问题:
io:format("My parameter value is ~p~n", [Param]).
可替换地:
error_logger:info_report/1
或其他error_logger
函数。
常用日志库lager
。
答案 2 :(得分:0)
感谢Dmitry Belyaev提到解析变换。 假设我们有日志代码:
?dump("My parameter value is $Param")
我需要的是用一些正则表达式解析格式字符串中的变量(“我的参数值是$ Param”)。此格式字符串包含单个var名称(Param)。我们需要使用修改后的格式字符串插入io_lib:format函数调用(通过转换原始AST):
print_message(io_lib:format("My parameter value is ~p~n", [Param]))
结果我们可以归档所需的行为:
Bar = "hello",
Buzz = buzz123,
?dump("Say $Bar to $Buzz"),
% => example:19: Say "hello" to buzz123
您可以查看我的实施here