[erlang新手] init函数参数错误导致的问题

gen_server的规约要求module必须实现init方法,形如:

init([State]) ->
	{ok, State}.

 

对新手来说,这里容易犯的一个错误是误以为参数不是list,于是编写代码为:

 

init( State ) ->
	{ok, State}.

 

这种错误一般很容易发现,但是对于 State 是 string 的情况则比较隐讳,因为——string也是一个list

 

今天就遇到一次这个陷阱,记录一下:

 

init( BaseUrl ) ->
	{ok, BaseUrl}.

 

上面这段代码,没有用中括号,所以传进来的不是string,而是一个 integer 数组,而后续使用代码为:

error_logger:info_msg("callback: ~p.~n",[BaseUrl]),
Url = BaseUrl++"/api/callback",

可以看出,即使打了日志也没用,因为输出的时候一切正常。

检查的方法其实也很简单,用下面的代码就可以判断是 [string] 还是 string:

 

  [X|_] = BaseUrl,
  error_logger:info_msg("is integer: ~p.~n",[is_integer(X)])

 

good luck

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值