您可以通過解析一個字符串表達式(類似於file:consult
):
% InputString = "...",
{ok, Scanned, _} = erl_scan:string(InputString),
{ok, Exprs} = erl_parse:parse_exprs(Scanned),
{value, ParsedValue, _} = erl_eval:exprs(Exprs, [])
(見http://www.trapexit.org/String_Eval)
您應該能夠使用io_lib:format
使用一個表達式轉換爲字符串~w
或~p
格式代碼,例如io_lib:format("~w", [{get, "/foo.html"}])
。
我不認爲這會很快,所以如果性能是一個問題,你可能不應該使用這樣的字符串。
另請注意,這可能是不安全的,因爲你正在評估任意表達式 - 如果你走這條路線,你應該對中間輸出做一些檢查。我建議查看erl_parse:parse_exprs
的結果以確保它包含您感興趣的格式(即它始終是{atom(),list()})的一個元組,並且沒有嵌入的函數調用。你應該可以通過模式匹配來做到這一點。
這正是我一直在尋找的。這是爲了調試和開發,所以性能幾乎不成問題。謝謝。 – nmichaels 2010-10-21 17:35:12