使用n2o框架时Erlang中的案例语句问题
关于Erlang中案例陈述的问题 我使用n2o作为我的web应用程序框架 在我的登录页面中,我创建了一个事件,当用户单击“注册”按钮时,从页面中提取字段使用n2o框架时Erlang中的案例语句问题,erlang,case,n2o,Erlang,Case,N2o,关于Erlang中案例陈述的问题 我使用n2o作为我的web应用程序框架 在我的登录页面中,我创建了一个事件,当用户单击“注册”按钮时,从页面中提取字段 event(sign_up) - > Gender = {Male,Female} = {wf:q(gm),wf:q(gf)}, Result = case Gender of Gender when Male == true -> <<"M">>; Gender when Female
event(sign_up) - >
Gender = {Male,Female} = {wf:q(gm),wf:q(gf)},
Result = case Gender of
Gender when Male == true -> <<"M">>;
Gender when Female == true -> <<"F">>;
Gender when Male == false, Female == false -> <<"Not Selected">>
end,
error_logger:info_msg("Stuff",[{Result}]).
活动(注册)->
性别={男性,女性}={wf:q(gm),wf:q(gf)},
结果=病例性别
男性时的性别==真->;
女性时的性别==真->;
男性==false,女性==false时的性别->
完,,
错误\u记录器:info\u msg(“Stuff”,[{Result}])。
当我测试页面时,日志代码永远不会被命中。它仅在删除case语句时显示。奇怪的是,在shell中执行case语句时,它的计算结果是正确的
我的案例陈述是否遗漏了一些内容?若要查看格式中的内容,需要在格式字符串中插入一个占位符(这里的~p代表漂亮的打印)。 我还简化了案例陈述
event(sign_up) - >
Gender = {wf:q(gm),wf:q(gf)},
Result = case Gender of
{true,false} -> <<"M">>;
{false,true} -> <<"F">>;
{false,false} -> <<"Not Selected">>;
%[edit] check the type of the return value of wf:q/1 if different from boolean
Gender -> Gender
end,
error_logger:info_msg("Gender selection : ~p~n",[Result]).
活动(注册)->
性别={wf:q(gm),wf:q(gf)},
结果=病例性别
{true,false}->;
{false,true}->;
{false,false}->;
%[编辑]如果与布尔值不同,请检查wf:q/1返回值的类型
性别->性别
完,,
错误\记录器:信息\消息(“性别选择:~p~n,[Result])。
作为旁注,如果在本例中也是一个有趣的(较短的)结构:
event(sign_up) - >
{M,F} = {wf:q(gm),wf:q(gf)},
Result = if M =:= true -> <<"M">>;
F =:= true -> <<"F">>;
true -> <<"Not Selected">> end,
error_logger:info_msg("Gender selection : ~p\n",[Result]).
跟踪之后,我没有意识到元组中的这些函数返回的是字符串文本,而不是我在case语句中用于匹配的原子填充模式
考虑到这一点,工作解决方案:
event(sign_up) - >
Gender = {list_to_atom(wf:q(gm)),list_to_atom(wf:q(gf))},
Result = case Gender of
{true,false} -> <<"M">>;
{false,true} -> <<"F">>;
Gender -> <<"Not Selected">>;
end,
活动(注册)->
性别={list_to_atom(wf:q(gm)),list_to_atom(wf:q(gf))},
结果=病例性别
{true,false}->;
{false,true}->;
性别->;
完,,
因此,经验教训是确保匹配的数据类型相同
这花了一段时间:)但得到了宝贵的教训。日志消息现在显示,但当M或F为真时,结果总是返回。您确定wf:q(gm)
返回的是原子而不是二进制或列表吗?首先检查。是否为您这样做:wf:q/1
返回一个字符串(列表)。代码建议应按预期工作,在一个条件下:wf:q(gm)和wf:q(gf)必须返回true或false。我没有检查这些函数的输出结果,因此如果您遇到问题,我建议您查看文档,或者更容易地按照我在编辑的代码中的建议跟踪调用结果。请注意:wf:q/1
返回字符串,而不是atom(这显然是错误的)
event(sign_up) - >
Gender = {list_to_atom(wf:q(gm)),list_to_atom(wf:q(gf))},
Result = case Gender of
{true,false} -> <<"M">>;
{false,true} -> <<"F">>;
Gender -> <<"Not Selected">>;
end,