从函数的erlang参考中peername
可以看出,有两种可能的返回。一个是IP地址和端口,另一个是错误。我的问题是如何创建一个 case 语句来检查两者以防出现错误?
到目前为止,我的这段代码只有在函数实际返回有用的东西时才有效,但是如果出现错误,元组会发生什么?
ip_address(Socket) ->
{ok,{Ip,Port}} = inet:peername(Socket),
从函数的erlang参考中peername
可以看出,有两种可能的返回。一个是IP地址和端口,另一个是错误。我的问题是如何创建一个 case 语句来检查两者以防出现错误?
到目前为止,我的这段代码只有在函数实际返回有用的东西时才有效,但是如果出现错误,元组会发生什么?
ip_address(Socket) ->
{ok,{Ip,Port}} = inet:peername(Socket),
像那样:
ip_address(Socket) ->
case inet:peername(Socket) of
{ok, {Ip, Port}} ->
io:format("ip ~p, port ~p~n", [Ip, Port]);
{error, Error} ->
io:format("error ~p~n", [Error])
end.
或者您可以使用带有两个子句的另一个函数:
ip_address(Socket) ->
ip_address_1(inet:peername(Socket)).
ip_address_1({ok, {Ip, Port}}) ->
io:format("ip ~p, port ~p~n", [Ip, Port]);
ip_address_1({error, Error}) ->
io:format("error ~p~n", [Error]).