在erlang函数中按变量名检索值

在erlang函数中按变量名检索值,erlang,Erlang,是否可以通过名称(名称表示为字符串)检索变量值 我想实现(如果可能的话)某种记录器宏,比如 Param = 3*4, % This should write "My parameter value is 12" to log ?LOG("My parameter value is $Param"). 谢谢。对于玩具问题,您可以使用: io:format("My parameter value is ~p~n", [Param]). 见和 或者: error_logger:info_repo

是否可以通过名称(名称表示为字符串)检索变量值

我想实现(如果可能的话)某种记录器宏,比如

Param = 3*4,
% This should write "My parameter value is 12" to log
?LOG("My parameter value is $Param"). 

谢谢。

对于玩具问题,您可以使用:

io:format("My parameter value is ~p~n", [Param]).
见和

或者:

error_logger:info_report/1
或其他功能


日志库是常用的。

日志的常用方法是使用格式化字符串和参数列表。不过,您的想法可以通过使用解析转换来实现。

感谢Dmitry Belyaev提到解析转换。 假设我们有日志代码:

?dump("My parameter value is $Param")
这里我需要的是用一些正则表达式解析格式字符串(“我的参数值是$Param”)中的变量。此格式字符串包含单个变量名(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

您可以查看我的实现

如果您对日志非常具体,您可以使用名为lager的现有库。它是广泛使用的日志库,使用parse_转换。@Marutha我对日志不是很具体。我只想有一种方便的方式来记录消息(不需要在代码中写入大量的波浪号和方括号:
io:format(“我的参数值是~p~n”,[Param])。
)这样的代码类似于
io:format(“我的参数值是~p~n,[Param])。
有时真的很烦人(所有这些波浪号和方括号…)这就是为什么我想使用更简单的代码,比如
?LOG(“我的参数值是$Param”)
我明白了,尽管所有代码都取决于解析转换。解析转换可能很难正确,请查看
Parse_trans
()
io_lib
所有这些
~
都有助于格式化,它将格式与数据分开。您提出的语法对于Erlang代码来说是“不寻常的”,但肯定是可读的。谢谢!解析转换是我需要的。
Bar = "hello",
Buzz = buzz123,    
?dump("Say $Bar to $Buzz"),
% => example:19: Say "hello" to buzz123