я написал макрос как следующие лаконичный лесозаготовок:Каковы недостатки использования потехи как сферы
-define(MY_MACRO(Expr, Params),
case Expr of
{correct_return, X} -> X;
Result -> io:format("Unexpected result (~p:~p): ~p", [ ?MODULE, ?LINE, [
{expr, ??Expr, Result},
{params, ??Params, Params}
]]),
undefined
end).
Но сталкиваюсь ошибки variable 'Result' unsafe in case
при использовании его в два раза в том же объеме. Следующий код решает мою проблему, но я думаю о его недостатке.
-define(MY_MACRO(Expr, Params), (fun() ->
case Expr of
{correct_return, X} -> X;
Result -> io:format("Unexpected result (~p:~p): ~p", [ ?MODULE, ?LINE, [
{expr, ??Expr, Result},
{params, ??Params, Params}
]]),
undefined
end end)()).
Или, может быть, есть лучшее решение?
Я только что проверил. 'begin ... end' не создает новую область. Но ссылка полезна. Благодарю. – citxx
просто используйте 'begin ... end' – BlackMamba