免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2868 | 回复: 2

[其他] erlang 第6章要点 [复制链接]

论坛徽章:
0
发表于 2009-07-11 18:23 |显示全部楼层

1. erlang:halt()可以即刻停止系统运行。
2. q()命令可以完成文件和数据库的一些处理后再退出。它是init:stop()的一个shell别名
3. erlang可以动态加载代码,正在运行的代码可以在重新编译后动态加裁而不用停止程序的运行。
4. 模块加载相关函数:
  code:get_path()                %% 可以获取当前加载路径的设定值。
   code:all_loaded()        %% 获取所有已经加载的模块。
  code:clash()                %% 看加载的模块是否有冲突。
        另外
  @spec code:add_patha(Dir) => true | {error, bad_directory}        %% 增加一个新的目录到加载路径的开头。
  @spec code:add_pathz(Dir) => true | {error, bad_directory}        %% 增加一个新的目录到加载路径的末尾。
5. 启动erlang时增加加载路径:
  erl -pa Dir1 -pa Dir2 ... -pz DirK1 -pz DirK2
   其中-pa相当于add_patha,-pz相当于add_pathz
6. 在erlang的home目录下(或当前目录下)可以加一个.erlang文件,在这个文件中可以写一些erlang代码,erlang在启动时首先执行这里面的代码。
   一般情况一下可以将加载目录的命令放到这个。
   如果不清楚当前系统下erlang的home目录,可以用init:get_argument(home).来获取。
   当前目录下的.erlang文件比home目录下的.erlang文件的优先级要高。

7. 除了在shell中运行一个模块外,还有以下的方法:
          方法一:命令行下编译运行
                  $ erlc hello.erl
                  $ erl -noshell -s hello start -s init stop       
   %% 可以加-pa/-pz命令选项在这个命令行中
                          %% 可以将这个命令行写到一个shell脚本中(如bash脚本),这样就可以直接执行脚本平启动erlang程序了。
                          %% 在windows下可以写一个bat文件,将这个命令写入。
          方法二:将程序当作escript脚本运行(不用编译),只有erlang R11B-4以后的版本才支持escript,在windows下不行
                  #!/usr/bin/env escript
                main(_) -> io:format("Hello world\n").        %% 这个函数需要是main,escript从这个函数开始
          方法三:当程序需要参数时,如何在命令行输入参数。
   -s选项后面是:ModName FuncName Args,其中Args是一个原子的参数列表。所以我们在程序中最好有一个处理命令行参数的函数。像这样:        main([A]) -> I = list_to_integer(atom_to_list(A)), ... %% 这里只接收一个参数,如果需要两个可以这样main([A, B]) -> ...
                escript与其它的脚本一样,运行时直接将参数放到后面就可以了。
8. atom_to_list(Atom) -> string 可以获取原子的字符串形式
9. list_to_integer(List) -> int 可以获取一个字符串的整数形式
10. 快速脚本:用-eval在命令行上直接运行一个erlang表达式,这个方法没什么大用途,我在windows测试好像没有显示什么内容。
        erl -eval 'io:format("Memory: ~p~n", [erlang:memory(total)]).' -noshell -s init stop

11. 一个makefile模板
# leave these lines alone
.SUFFIXES: .erl .beam .yrl # .yrl文件是erlang解析生成器程序(yecc)的解析定义文件

.erl.beam:
        erlc -W $        erlc -W $        module3 ... special1 ...\
        muduleN

all: compile

compile: ${MODS:%=%.beam} subdirs

#特殊情况,特殊编译
special1.beam: special1.erl
        ${ERL} -Dflag1 -W0 special1.erl

#运行程序
application1: compile
        ${ERL} -pa Dir1 -s application1 start Arg1 Arg2

#编译子目录,子目录中也有makefile
subdirs:
        cd dir1; make
        cd dir2; make

clean:
        rm -rf *.beam erl_crash.dump        #erl_crash.dump是erlang的崩溃转存文件
        cd dir1; make clean
        cd dir2; make clean

12. 一个精简makefile
.SUFFIXES: .erl .beam

.erl.beam:
        erlc -W $        ${ERL} -pa Dir1 -s module start

compile: ${MODS:%=%.beam}

clean:
        rm -rf *.beam erl_crash.dump

13. erlang shell中有一个emacs编辑器中的行编辑命令的一个子集。对于不用emacs的人没有什么用,比如我。

14. erlang启动时带有一个-detached选项,它后在后台运行
15. erlang启动时带有一个-heart Cmd选项,系统会启动一个监视进程,如果发现erlang进程死亡,监视进程就会执行Cmd,通常Cmd会重启Erlang系统。

16. 如果调用一个eralng函数时发生undef错误,可能是以下几种原因:
        (1)系统中不存在这个模块或函数,可能是拼写错误。
        (2)系统中有这个模块,但没有编译。
        (3)已经编译了,但它所在的目录不在erlang的加载路径中。
        (4)加载了几个不同版本,我们可以通过code:clash()函数来看一下是否有重名的模块。

17. JCL(Job Control Language)模式:在erlang shell中按下Ctrl+G会进入JCL模式,可以输入h寻求帮助。

18. man:在Unix系统的命令行中执行:$ erl -man lists可以看到lists
19. 世界是并行的。
20. erlang程序模拟我们思考的反应的模式。
21. 人就像是一个通过发送消息来进行交流的实体。
22. 如果有人死了,其他人会注意到。
               
               
               

本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/16651/showart_1993332.html

论坛徽章:
0
发表于 2014-09-21 13:01 |显示全部楼层
21. 人就像是一个通过发送消息来进行交流的实体。
22. 如果有人死了,其他人会注意到。

论坛徽章:
12
射手座
日期:2014-10-02 11:31:29程序设计版块每日发帖之星
日期:2016-05-28 06:20:00每日论坛发贴之星
日期:2016-05-27 06:20:00程序设计版块每日发帖之星
日期:2016-05-27 06:20:00程序设计版块每日发帖之星
日期:2016-05-25 06:20:00每日论坛发贴之星
日期:2016-05-24 06:20:00程序设计版块每日发帖之星
日期:2016-05-24 06:20:0015-16赛季CBA联赛之深圳
日期:2016-05-23 15:33:59程序设计版块每日发帖之星
日期:2016-05-20 06:20:00程序设计版块每日发帖之星
日期:2016-04-26 06:20:00神斗士
日期:2015-12-03 09:27:3215-16赛季CBA联赛之八一
日期:2016-12-29 09:56:05
发表于 2016-05-09 18:15 |显示全部楼层
总之,多读在线文档,多实践,是熟练使用er的关键。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP