You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Erlang中proplists:get_value获取pid返回undefined的排查方法咨询

Erlang proplists:get_value 返回undefined的排查方法
  • 检查键的原子一致性
    Erlang原子大小写敏感,确认函数里的pid和列表中的键完全一致,没有写成Pid或其他大小写变体。可以在函数中添加打印验证键的类型:

    io:format("Key type: ~p~n", [pid]),
    
  • 精准验证Conn的实际结构
    io:format("~p", Conn)的输出可能存在视觉误导,比如pid键可能嵌套在子结构中而非顶层。改用更精确的打印方式:

    io:format("~w~n", [Conn]), % 输出无简化的原始结构
    lists:foreach(fun({K, V}) -> io:format("Key: ~p, Value: ~p~n", [K, V]) end, Conn), % 遍历打印每个键值对
    

    确认每个顶层键的实际内容。

  • 排查proplists函数是否被覆盖
    确保调用的是标准库的proplists:get_value/2,没有自定义同名函数覆盖。在Shell中执行code:which(proplists)查看模块路径,验证是系统自带版本。

  • 确认参数传递的正确性
    检查调用close_single_connection(Conn, ReqData)时,传入的Conn是否被其他前置逻辑修改过(比如被转换成map或其他非列表结构)。在函数开头添加类型验证:

    io:format("Conn is list? ~p~n", [is_list(Conn)]),
    

    如果Conn不是列表,proplists:get_value会直接返回undefined。

  • 测试极简版函数排除干扰
    编写极简测试函数,直接传入Shell中可用的列表,验证逻辑本身是否正常:

    test_conn_pid() ->
        List = [{name,<<"127.0.0.1:53290 -> 127.0.0.1:1883">>},{pid,<0.987.0>},{user,<<"guest">>},{type,direct}],
        proplists:get_value(pid, List).
    

    如果该函数能返回正确值,说明问题出在调用上下文的参数传递环节。

内容的提问来源于stack exchange,提问作者Nuwan Sameera

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 21:06:29