Erlang I';m获取列表的函数\u子句:n/2函数
我对这个代码有一些问题,这真的很奇怪,也许有人可以告诉我发生了什么:Erlang I';m获取列表的函数\u子句:n/2函数,erlang,Erlang,我对这个代码有一些问题,这真的很奇怪,也许有人可以告诉我发生了什么: suggested_system_actor_data_for_hookup(RealActorId, RealActorName, RealActorLang, SuggestedUsers = [_|_]) -> case length(SuggestedUsers) > 0 of true -> SuggestedUserIndexRedisKey = "real_actor."
suggested_system_actor_data_for_hookup(RealActorId, RealActorName, RealActorLang, SuggestedUsers = [_|_]) ->
case length(SuggestedUsers) > 0 of
true ->
SuggestedUserIndexRedisKey = "real_actor." ++ helper:convert_value_to_list(RealActorId) ++ "." ++
helper:convert_value_to_list(RealActorLang) ++ ".hookup.suggested_user_index",
NextIndex = next_index(SuggestedUserIndexRedisKey, SuggestedUsers),
case NextIndex of
not_found -> not_found;
NextIndex ->
case is_list(SuggestedUsers) of
true ->
Item = lists:nth(NextIndex, SuggestedUsers), % <--- throws error %
SystemActorId = helper:convert_value_to_list(ej:get({"user_id"}, Item)),
SystemActorSiteId = helper:convert_value_to_list(ej:get({"site_id"}, Item)),
case helper:has_redis_key_last_visit_timestamp(RealActorId, SystemActorId) of
{ok, no} ->
?MODULE:send_visit_and_sleep(RealActorName, RealActorId, SystemActorId),
{SystemActorId, SystemActorSiteId};
{ok, _LastVisitTimestamp} -> {SystemActorId, SystemActorSiteId}
end;
false ->
helper:log_error("SuggestedUsers is not a list = " ++ helper:convert_value_to_list(SuggestedUsers), ?LINE, ?MODULE),
not_found
end
end;
false -> not_found
end;
suggested_system_actor_data_for_hookup(_RealActorId, _RealActorName, _RealActorLang, _SuggestedUsers = []) ->
not_found.
连接的建议系统参与者数据(RealActorId、RealActorName、RealActorLang、SuggestedUsers=[\u124; 124;]->
案例长度(建议用户)>0个
正确->
SuggestedUserIndexRedisKey=“real\u actor.++helper:将\u值\u转换为\u列表(RealActorId)+”++
帮助程序:将\u值\u转换为\u列表(RealActorLang)+“。连接。建议的\u用户\u索引“,
NextIndex=下一个索引(SuggestedUserIndexRedisKey,SuggestedUsers),
案例NextIndex
未找到->未找到;
下一个索引->
案例列表(建议用户)
正确->
项目=列表:第n个(下一个索引,建议用户),%
?模块:发送访问和睡眠(RealActorName、RealActorId、SystemActorId),
{SystemActorId,systemactorsteid};
{好的,{u lastVisitItemsTamp}->{SystemActorId,SystemActorSteid}
结束;
错误->
helper:log_error(“SuggestedUsers不是列表=“++helper:convert_value_to_list(SuggestedUsers)”、?行、?模块),
找不到
结束
结束;
false->未找到
结束;
建议的连接系统参与者数据(\u RealActorId,\u RealActorName,\u RealActorLang,\u SuggestedUsers=[])->
没有找到。
在第194行:Item=lists:nth(NextIndex,SuggestedUsers)处,正在日志中抛出错误,我不知道为什么
=ERROR REPORT==== 4-Jul-2018::20:50:47 ===^M
Error in process <0.31747.0> on node 'animate_online_real_actors@online.anim.int' with exit value:^M
{function_clause,^M
[{lists,nth,[1,[]],[{file,"lists.erl"},{line,170}]},^M
{hookup,suggested_system_actor_data_for_hookup,4,^M
[{file,^M
"/projects/animate_online_real_actors/animate_online_real_actors/_build/prod/lib/animate_online_real_actors/src/hookup.erl"},^M
{line,194}]},^M
{hookup,send_hookup_with_verification_of_suggested_system_actor,12,^M
[{file,^M
"/projects/animate_online_real_actors/animate_online_real_actors/_build/prod/lib/animate_online_real_actors/src/hookup.erl"},^M
{line,81}]},^M
{hookup,process_hookup,3,^M
[{file,^M
"/projects/animate_online_real_actors/animate_online_real_actors/_build/prod/lib/animate_online_real_actors/src/hookup.erl"},^M
...etc
=错误报告===2018年7月4日::20:50:47====^M
节点“在线动画”处理中出错_actors@online.anim.int'的退出值:^M
{function_子句,^M
[{lists,n[1,[]],[{file,“lists.erl”},{line,170}]},^M
{连接,建议连接的系统参与者数据,4,^M
[{文件,^M
“/projects/animate\u online\u real\u actors/animate\u online\u real\u actors/\u build/prod/lib/animate\u online\u real\u actors/src/hookup.erl”},^M
{line,194}]},^M
{连接,发送带有建议系统参与者验证的连接,12,^M
[{文件,^M
“/projects/animate\u online\u real\u actors/animate\u online\u real\u actors/\u build/prod/lib/animate\u online\u real\u actors/src/hookup.erl”},^M
{line,81}]},^M
{连接,进程{u连接,3,^M
[{文件,^M
“/projects/animate\u online\u real\u actors/animate\u online\u real\u actors/\u build/prod/lib/animate\u online\u real\u actors/src/hookup.erl”},^M
等
代码段中有许多无用的代码。由于在函数头中使用了模式匹配SuggestedUsers=[| |]
,您知道SuggestedUsers是一个非空列表,因此长度(SuggestedUsers)>0
始终为真,与是列表(SuggestedUsers)
相同
关于错误,只有两个可能的原因:
- NextIndex不是大于0的整数
- NextIndex大于长度(建议用户)
suggested_system_actor_data_for_hookup(RealActorId, RealActorName, RealActorLang, SuggestedUsers = [_|_]) ->
SuggestedUserIndexRedisKey = "real_actor." ++ helper:convert_value_to_list(RealActorId) ++ "." ++
helper:convert_value_to_list(RealActorLang) ++ ".hookup.suggested_user_index",
NextIndex = next_index(SuggestedUserIndexRedisKey, SuggestedUsers),
case (NextIndex > 0) and (NextIndex =< length(SuggestedUsers)) of
% an atom is bigger than any integer, so the test covers the case NextIndex == not_found
false -> not_found;
true ->
Item = lists:nth(NextIndex, SuggestedUsers),
SystemActorId = helper:convert_value_to_list(ej:get({"user_id"}, Item)),
SystemActorSiteId = helper:convert_value_to_list(ej:get({"site_id"}, Item)),
{ok,Answer} = helper:has_redis_key_last_visit_timestamp(RealActorId, SystemActorId),
maybe_send_visit_and_sleep(Answer,RealActorName, RealActorId, SystemActorId);
{SystemActorId, SystemActorSiteId}
end;
suggested_system_actor_data_for_hookup(_RealActorId, _RealActorName, _RealActorLang, _SuggestedUsers = []) ->
not_found.
maybe_send_visit_and_sleep(no,RealActorName, RealActorId, SystemActorId) ->
send_visit_and_sleep(RealActorName, RealActorId, SystemActorId);
maybe_send_visit_and_sleep(_,_,_,_) ->
ok.
连接的建议系统参与者数据(RealActorId、RealActorName、RealActorLang、SuggestedUsers=[\u124; 124;]->
SuggestedUserIndexRedisKey=“real\u actor.++helper:将\u值\u转换为\u列表(RealActorId)+”++
帮助程序:将\u值\u转换为\u列表(RealActorLang)+“。连接。建议的\u用户\u索引“,
NextIndex=下一个索引(SuggestedUserIndexRedisKey,SuggestedUsers),
案例(NextIndex>0)和(NextIndex=未找到;
正确->
项目=列表:第n个(下一个索引,建议用户),
SystemActorId=helper:convert_value_to_list(ej:get({“user_id”},Item)),
systemactorsteid=helper:convert_value_to_list(ej:get({“site_id”},Item)),
{ok,Answer}=helper:has_redis_key_last_visit_timestamp(RealActorId,systemactrid),
可能会发送访问和睡眠(应答、RealActorName、RealActorId、SystemActorId);
{SystemActorId,systemactorsteid}
结束;
建议的连接系统参与者数据(\u RealActorId,\u RealActorName,\u RealActorLang,\u SuggestedUsers=[])->
没有找到。
可能会发送访问和睡眠(否,RealActorName,RealActorId,SystemActorId)->
发送访问和睡眠(RealActorName、RealActorId、SystemActorId);
也许你会去探望你,然后睡觉(,,,,,)->
好啊
代码段中有许多无用的代码。由于在函数头中使用了模式匹配SuggestedUsers=[| |]
,您知道SuggestedUsers是一个非空列表,因此长度(SuggestedUsers)>0
始终为真,与是列表(SuggestedUsers)
相同
关于错误,只有两个可能的原因:
- NextIndex不是大于0的整数
- NextIndex大于长度(建议用户)
suggested_system_actor_data_for_hookup(RealActorId, RealActorName, RealActorLang, SuggestedUsers = [_|_]) ->
SuggestedUserIndexRedisKey = "real_actor." ++ helper:convert_value_to_list(RealActorId) ++ "." ++
helper:convert_value_to_list(RealActorLang) ++ ".hookup.suggested_user_index",
NextIndex = next_index(SuggestedUserIndexRedisKey, SuggestedUsers),
case (NextIndex > 0) and (NextIndex =< length(SuggestedUsers)) of
% an atom is bigger than any integer, so the test covers the case NextIndex == not_found
false -> not_found;
true ->
Item = lists:nth(NextIndex, SuggestedUsers),
SystemActorId = helper:convert_value_to_list(ej:get({"user_id"}, Item)),
SystemActorSiteId = helper:convert_value_to_list(ej:get({"site_id"}, Item)),
{ok,Answer} = helper:has_redis_key_last_visit_timestamp(RealActorId, SystemActorId),
maybe_send_visit_and_sleep(Answer,RealActorName, RealActorId, SystemActorId);
{SystemActorId, SystemActorSiteId}
end;
suggested_system_actor_data_for_hookup(_RealActorId, _RealActorName, _RealActorLang, _SuggestedUsers = []) ->
not_found.
maybe_send_visit_and_sleep(no,RealActorName, RealActorId, SystemActorId) ->
send_visit_and_sleep(RealActorName, RealActorId, SystemActorId);
maybe_send_visit_and_sleep(_,_,_,_) ->
ok.
连接的建议系统参与者数据(RealActorId、RealActorName、RealActorLang、SuggestedUsers=[\u124; 124;]->
SuggestedUserIndexRedisKey=“real\u actor.++helper:将\u值\u转换为\u列表(RealActorId)+”++
帮助程序:将\u值\u转换为\u列表(RealActorLang)+“。连接。建议的\u用户\u索引“,
NextIndex=下一个索引(SuggestedUserIndexRedisKey,SuggestedUsers),
案例(NextIndex>0)和(NextIndex=未找到;
正确->
项目=列表:第n个(下一个索引,建议用户),
SystemActorId=helper:convert_value_to_list(ej:get({“user_id”},Item)),
systemactorsteid=helper:convert_value_to_list(ej:get({“site_id”},Item)),
{ok,Answer}=helper:has_redis_key_last_visit_timestamp(RealActorId,systemactrid),
可能会发送访问和睡眠(应答、RealActorName、RealActorId、SystemActorId);
{SystemActorId,systemactorsteid}
结束;
建议的系统参与者数据