我只想知道当你刚开始使用Erlang时,你和最终解决方案之间存在的所有小问题。
例如,这是我的第一个速度碰撞:
答案 0 :(得分:5)
学习浏览标准文档
一旦了解了OTP文档的组织方式,就可以更轻松地找到您要查找的内容(您往往需要了解哪些应用程序提供了哪些模块或模块类型)。
另外,只浏览应用程序的文档通常是非常有益的 - 我用这种方式发现了许多非常有用的代码 - sys
,dbg
,toolbar
等。
shell erlang和模块erlang之间的区别
Shell erlang与模块erlang略有不同。您无法定义模块功能(仅限于操作),您需要加载记录定义才能使用记录(rr/1
)等。学习如何用匿名函数编写erlang代码有点棘手,但对于使用远程shell进行生产系统工作至关重要。
学习shell和{start,spawn} _link ed进程之间的交互 - 当你运行一些崩溃的shell代码(引发异常)时,shell进程退出并将退出信号广播到你链接到的任何东西。这将关闭你正在处理的新gen_server。 (“为什么我的服务器进程一直在消失?”)
erlang表达式和保护表达式之间的区别
Guard表达式(when子句)不是Erlang表达式。它们可能看起来很相似,但它们完全不同。 Guards不能调用任意的erlang函数,只能调用函数(length/1
,类型测试,element/2
以及OTP文档中指定的其他函数。警卫成功或失败,没有副作用。另一方面,Erlang表达式可以做他们喜欢的事情。
代码加载
确定代码升级的工作时间和方式,以及让gen_server升级到最新版本的回调模块(code:load(Mod), sys:suspend(Pid), sys:change_code(Pid, Mod, undefined, undefined), sys:resume(Pid).
)的咒语。
代码服务器路径(code:get_path/0
) - 我无法计算我遇到未定义的函数错误的次数,结果是我忘记将ebin目录添加到代码搜索路径。
构建erlang代码
制定一个有用的emake(make:all/0
和erl -make
)和gnu make的组合需要相当长的时间(到目前为止大约三年)。
我目前最喜欢的makefile可以在http://github.com/archaelus/esmtp/tree/master
Erlang发行
获取节点名称,dns,cookie以及其他所有权限,以便能够net_adm:ping/1
其他节点。这需要练习。
远程shell IO复杂性
记住要在远程节点上运行group_leader()
到io:format
次调用,以便输出显示在shell中而不是神秘地消失(我认为SASL报告浏览器rb
在通过远程shell连接使用时将其部分输出发送到错误的节点仍然存在问题)
答案 1 :(得分:2)
将它集成到msvc 6中,这样我就可以使用编辑器,并在输出窗口中查看结果。
我用
创建了一个工具命令 - erlc的路径
参数 - + debug_info $(FileName)$(FileExt)
初始目录 - $(fileDir)
选中使用输出窗口。
答案 2 :(得分:2)
答案 3 :(得分:1)
<强> controlling_process()强>
如果在多个线程中生成,请使用controlling_process(Socket,Pid)。正确的数据包到正确的线程。
答案 4 :(得分:1)
<强> net_adm:平()强>
你要开始和另一台服务器通话吗?记得net_adm:ping('car @ bsd-server')。在壳中。否则,没有任何沟通可以通过。
答案 5 :(得分:0)
<强>定时器:睡眠()强>
暂停X毫秒。
答案 6 :(得分:0)
让我花费最多时间来解决问题的事情就是完全围绕函数调用和消息传递构建代码的想法。其余部分要么从那里掉出来(产卵,远程节点),要么觉得你需要用任何新语言(语法,stdlib)学习通常的东西。