读书人

[erlang新手] init函数参数异常导致的

发布时间: 2012-11-08 08:48:12 作者: rapoo

[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

读书人网 >编程

热点推荐