Вы не можете.Erlang имеет функцию, называемую «одиночное присваивание», что означает, что вы не можете изменить значение переменной после ее назначения в первый раз.Если вы попытаетесь это сделать, то вместо этого он станет совпадением с шаблоном, и вы получите ошибку badmatch
, как если бы вы попытались сделать "test1" = "test2"
.
Ваш пример можно записать так:
A =
if
Condition ->
"test2";
true ->
"test1"
end
См. этот вопрос и его ответы для получения дополнительной информации об одном задании.
В вашем расширенном примере то, что вы пытаетесь сделать, может быть достигнуто с помощью сгиба,То есть, учитывая список и дополнительное значение, называемое «аккумулятор», просмотрите список и вызовите функцию для каждого элемента, и пусть возвращаемое значение этой функции будет новым аккумулятором - и в конце вернет аккумулятор.
Используйте для этого lists:foldl/3
, например:
get_alert_body(Packet) ->
BodyElement = element(8,Packet),
DefaultBody = "my text",
Els = xmpp:get_els(Packet),
lists:foldl(fun(El, Body) ->
ElementName = io_lib:format("~s",[xmpp:get_name(El)]),
IsFile = string:equal(ElementName,"fileType"),
if
IsFile ->
FileType = fxml:get_tag_cdata(El),
IsPhoto = string:equal(FileType,"photo"),
IsVideo = string:equal(FileType,"video"),
if
IsPhoto ->
%% if it gets to this I would like to return "my photo"
"my photo";
IsVideo ->
%% else if it gets to this I would like to return "my video"
"my video";
true ->
%% otherwise return the existing value
Body
end;
true ->
ok
end
end, DefaultBody, Els).