erlang开发经验谈:防坑指南

任何语言在使用中都会遇到这样那样的问题,erlang也是。这里整理下我遇到的一些问题,避免继续踩坑。 说实话,“防坑指南”这个标题有点过于标新立异,不过还是希望能引起重视,避免在实际开发中重复犯这些问题。


'--' 运算与 '++'运算

1> [1,2,3,4] -- [1] -- [2]. 
[2,3,4]
算是erlang经典的问题了。这是从后面算起的,先算 [1] -- [2] ,得到 [1] 后被 [1,2,3,4] --,最后得到 [2,3,4]
 '++'运算也是一样的,也是从后面开始算起。
2> [1,2,3,4] -- [1] ++ [2,3,4].
[]
另外,以下这种情况也要注意,只会减去遇到的第一个元素。
3> [1,2,3,2] -- [2].
[1,3,2]



erlang:function_exported()

这个接口是用来检查模块函数是否导出,但是,如果模块没加载过,这个函数返回值就是false
3> erlang:function_exported(odbc,start,0).
false
4> odbc:start().
ok
5> erlang:function_exported(odbc,start,0).
true
我之前也讨论过这个问题,解决方案看这里


erlang:list_to_binary()

如果参数是多层嵌套结构,就会被扁平化掉,使用 binary_to_list 不能转成原来的数据,也就是不可逆的。
6> list_to_binary([1,2,[3,4],5]) .
<<1,2,3,4,5>>
如果想可逆,可以使用 erlang:term_to_binary
7> binary_to_term(term_to_binary([1,2,[3,4],5])).
[1,2,[3,4],5]



erlang:list_to_atom()

这个函数用于字符串转原子,本身没什么问题,但是erlang系统有原子总数限制,除非整个节点关闭了,否则原子就算没用到了也不会被gc。而 lists_to_atom()  如果要转换的原子不存在,将会自动重新生成。可以换成另外一个函数 list_to_existing_atom ,只会生成已经存在的原子
2> list_to_atom("erlang").
erlang
3> list_to_existing_atom("erlang").
erlang
4> list_to_existing_atom("hello").
** exception error: bad argument
     in function  list_to_existing_atom/1
        called as list_to_existing_atom("hello")
也不是说 lists_to_atom 不能使用,避免直接将远程传过来的字符串转成原子。
除了这里提到的,还有 binary_to_atom() , binary_to_term() 也有这个问题。对于binary_to_atom()  可以换成 binary_to_existing_atom() , 但 binary_to_term () 有点不同,参考 erlang binary数据转换的问题 解决这个问题


erlang:process_info()

这个函数用以查看任意进程的内部数据,比如进程字典数据,消息队列长度,占用内存,当前调用栈等。但是要注意一个问题,如果是查看其他进程,数
  • 7
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 12
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值