gpt4 book ai didi

string - 如何在 Erlang 中为字符串变量重新赋值?

转载 作者:行者123 更新时间:2023-12-01 23:26:59 25 4
gpt4 key购买 nike

我是 Erlang 新手。我只想为字符串变量重新分配一个值:

get_alert_body(Packet) ->
BodyElement = element(8,Packet),
Body = "my text",
Els = xmpp:get_els(Packet),
lists:foreach(fun(El) ->
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"
Body = "my photo";
IsVideo ->
%% else if it gets to this I would like to return "my video"
Body = "my video";
true ->
%% otherwise I would like to return "my text"
ok
end;
true ->
ok
end
end, Els),
Body.

但我收到此错误:

error,{badmatch,"test2"}

即使我做了类似的事情:

A = "test1",
A = "test2",

我也遇到同样的错误。

非常感谢您的帮助。

最佳答案

你不能。 Erlang 有一个称为“单一赋值”的功能,这意味着在第一次赋值后就无法更改变量的值。如果您尝试这样做,它就会变成模式匹配,并且您会收到 badmatch 错误,就像您尝试执行 "test1"= "test2".

您的示例可以写为:

A =
if
Condition ->
"test2";
true ->
"test1"
end

参见this question及其有关单个作业的更多信息的答案。

<小时/>

在您的扩展示例中,您想要做的事情可以通过折叠来实现。也就是说,给定一个列表和一个称为“累加器”的附加值,遍历列表并为每个元素调用一个函数,并让该函数的返回值成为新的累加器 - 并最终返回累加器。

使用 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).

关于string - 如何在 Erlang 中为字符串变量重新赋值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54556557/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com