由于个人的兴趣,之前自学过一段时间的erlang, 后来工作忙,慢慢遗忘了,现在计划实现一个高并发的项目,考虑到复杂性和时间限制, 又重新系统的学习erlang。总结了一些容易出现的错误, 这些错误对于刚入门的我,有时不是很轻松就能解决。
1.首先记录一个非常规错误, 只是个人的坏习惯, 写一个Makefile文件,需要将生成的beam文件放入到指定的目录target中, 借鉴C/C++文件的makefile,我写成 erlc a.erl -o target. 发现生成的文件一直在当前目录,而并不是在target目录,奇了怪了,erlc -help一看, 也是-o 表示指定目录啊,想不通,后来写成 erlc -o target a.erl 就正确了。
2. erlang程序启动或运行出错时,出现了init_boot类似字样, 这种情况一般都是erlang内建函数名写错,或者函数的元数(参数个数写错),或者模块名没有导入。
3. 这个问题我到现在还没有弄明白,erlang中的箭头作用到底是什么。我一开始我认为箭头类似函数开始的标志, 所以我开始一律这种格式命名函数 " xxx() -> ", 后来,当函数中第一条语句是when断言时,这种格式就报错了,这时箭头只能写在when的后面。
4. 在makefile文件中启动erlang应用程序总是报错, 感觉应该是make进程和erlang shell进程环境变量不一致造成的。
5. 启动或运行erlang程序出错时, 出现了undefined字样, 这类一般也是数名写错,或者函数的元数(参数个数写错),或者模块名没有导入。
6. spawn() 这个函数最开始总是写错参数类型, 该函数常被调用的方式有两种,一是官方推荐的 spwan(Module, Function, [Args], 另一种就是 spawn(fun), 注意这个参数是个fun类型,而不是函数名。