
erlang
张国星就是个弱智
我是张国星,我就是个弱智
展开
-
erlang common_test测试框架
这种中文文献少的语言用起来真尼玛蛋疼,看英语头疼。测试文件名字使用 *_SUITE.erl的形式,模块中都包含ct.hrl头文件,在每个测试文件中需要导出all/0函数,返回索要在该模块中执行的测试用例组和测试用力的列表。Init and End per Suiteinit_per_suite/1:测试套件初始化时会调用1次。参数是一个propolist结构的变量Config,作为每个测试用例的运行时数据,返回值是修改后的Config,一般在这个函数中可以保存一些链接信息。end_per_suite原创 2020-11-13 14:49:41 · 461 阅读 · 0 评论 -
erlang io:format io_lib:format
io:formats 用字符串语法来打印参数,如果没有Unicode转换修饰符存在(t),参数为iolist, 二进制,atom, 如果t有效,则参数为unicode:chardata, 表示二进制文件是UTF-8。字符打印时不带引号。w 参数为erlang term,输出没有格式,如果原子包含嵌入的不可打印字符,则原子将打印在引号内,除非使用t,否则原子字符>255会被庄毅。p...原创 2020-01-02 12:08:03 · 1724 阅读 · 0 评论 -
erlang错误处理
https://www.cnblogs.com/zhongwencool/p/error_exit_throw.html原创 2019-04-23 15:23:03 · 491 阅读 · 0 评论 -
learn you some erlang-recursion
erlang这门语言是没有for循环的,最初一开始我一直也都是使用lists:foldl()来代替for循环来使用的,很少去有意识的使用递归,然后后面有个案子因为要进行模拟操作,所以也只能用递归来解决,后面就开始有意识的开始使用递归操作。比如要写一个计算lists的长度的一个函数,C/C++大概会按照这样的思路来写len([]) -> 0;len([_|T]) -> 1 + le...原创 2019-04-19 11:16:32 · 243 阅读 · 0 评论 -
lyse - Errors and Processes
erlang里面可以使用link来监控其他进程是否死亡。link是双向的,并且如果多次在两个相同之间调用Link只会有一条link产生。相连进程如果由某一进程因某种原因而终止,会通过一种叫做信号的特殊消息传递给相连进程,该信号会自动作用于相连进程并杀死它。通过process_flag(exit_trap,true)可以将进程变为系统进程,从而将退出信号转换成普通的消息。exit/2函数可以...原创 2019-04-28 16:21:45 · 184 阅读 · 0 评论 -
gen_fsm
gen_fsm很gen_server差不多,不过gen_fsm是由状态来推动事件发展的,这个东西公司的项目没有用到,不过他是可以用于像游戏中处理人物状态的进程的。send_event(FsmRef, Event) -> ok %%发出一个异步事件给gen_fsm处理,Event传递给Module:StateName/2处理send_all_state_event(FsmRef, Even...原创 2019-05-14 15:09:20 · 527 阅读 · 0 评论 -
spervisor阻塞
a.erl-behaviour(supervisor)start_link() -> supervisor:start_link({local, ?MODULE}, ?MODULE, []).init(Args) -> {ok, {one_for_one, 10,10},[{b, {b, start_link, Args}, permanent, 5000, worker, ...原创 2019-05-15 11:43:35 · 219 阅读 · 0 评论 -
lyse-building otp applications
erlang虚拟机启动的时候,会启动一个叫做application controller的进程,它有点像是所有application的supervisor。当启动一个application时,application controller会启动一个application master,它有点像是处于application的头supervisor与application controller的中间件...原创 2019-05-15 15:53:27 · 151 阅读 · 0 评论 -
supervisor重启策略
supervisor的init函数会写重启策略,然后发现使用supervisor:terminate_child/2时,是不会自动重启的,但是exit/2是可以导致的。原创 2019-05-15 17:19:11 · 1933 阅读 · 0 评论 -
erlang emakefile
不用rebar的时候想编译的话可以用emakefile,之前一直很sb的用c("*.erl")这样来一个一个编译,后来发现直接用make:all([load])/erl -make就可以了在当前的工作目录下新建一个叫Emakefile的文件,在这个文件里面写{"src/*",[debug_info,{i,"include/"},{outdir,"ebin/"}]}.就可以了,里面的选项就是...原创 2019-05-24 15:47:57 · 641 阅读 · 0 评论 -
erlang 时间函数
https://blog.youkuaiyun.com/mycwq/article/details/45346411很多人会注意到这个问题,erlang提供了2个时间函数,erlang:now() 和os:timestamp()。用法一样,都是返回当前的时间。具体时间是从1970年1月1日零时算起,到现在经过的时间,结果为{MegaSecs, Secs, MicroSecs}。这两个函数有什么区别?...转载 2019-05-30 11:07:13 · 1162 阅读 · 0 评论 -
lysm-release is the world
英文看不太懂。。。首先启动erl是可以指定-env ERL_LIBS "." 这个变量可以告诉erlang到哪里去找到OTP application对于一些application,他关闭后erlangVM任然在运行,我们可以通过init:stop()来关闭虚拟机erlang可以使用systools来进行打包,创建.rel文件,比如:{release,{"erlcount", "...原创 2019-05-28 15:08:30 · 177 阅读 · 0 评论 -
erlang将字符串转换成erlang数据结构
今天在浏览项目战斗模块代码的时候有用到,学习了一下Str1 = "#{a=>b,c=>d}".{ok,Tokens,_} = erl_scan:string(Str1 ++ "."). %% 要解析的字符串一定要以.结尾{ok, #{a=>b,c=>d}} = erl_parse:parse_term(Tokens)....原创 2019-04-18 11:09:35 · 832 阅读 · 0 评论 -
erlang bson
bson是binary json的缩写,可以把它看做是键值对的组合,主要在mongodb做数据存储时用到,看了下Git上有人用erlang写了个bson,学习一下写法。%% 这个函数时用来查找filed所对应的index的find(Label, Doc) -> findN(Label, Doc, 0, tuple_size(Doc) div 2).findN(Label, Doc, H...原创 2019-03-21 14:21:39 · 268 阅读 · 0 评论 -
erlang gen_server
对gen_server的函数只是浏览了下,没仔细看过,这里写一下几个重要函数的参数和返回值call(ServerRef, Request, Timeout) -> Reply向ServerRef发起一个call的请求直到回调模块调用Module:handle_call完成该请求并返回或者超时。ServerRef就是pid,name等等,这里面有个需要注意的参数Timeout,默认值为5...原创 2019-03-22 17:38:29 · 1013 阅读 · 0 评论 -
erlang link和monitor
简单总结一下Link和monitor的区别首先说下erlang进程是分为普通进程和系统进程的,普通函数可以通过执行*process_flag(trap_exit, true)来变成系统进程的。link可以将两个进程链接起来,多次链接同一个进程无效。当一个进程终止时,会向链接进程发送一个错误信号,系统进程收到错误信号时,会将信号转化成{‘Exit’, Pid, Why}形式的消息,如果进程是正常...原创 2019-03-26 12:06:13 · 457 阅读 · 0 评论 -
erlang gen_server terminate
原文地址总结一下:使用exit(Pid,Reason)时:gen_server设置了trap_exit为false时,不会进行信号的转换,1.Reason为normal,gen_server不退出,terminate不执行;2.Reason为test、shutdown、kill、other时。gen_server退出,terminate不执行gen_server设置了trap_exit...转载 2019-03-26 16:10:24 · 394 阅读 · 0 评论 -
erlang poolboy
看mongodb的代码时候看到用了poolboy,poolboy是进程池,代码很简单。说一下进程池是什么,进程池就是用空间换时间,将一些进程先启动起来,然后使用的时候从池子里拿出来执行,用完后放回去就可以了。它适用于1.需要快速响应的请求。2.需要消费大量时间创建进程的时候(比如数据库的链接) 3.限制同时又大量的进程产生...原创 2019-03-27 11:51:25 · 870 阅读 · 0 评论 -
erlang http
http协议基础原创 2019-04-16 11:53:18 · 1724 阅读 · 0 评论 -
Learn you some erlang-Modules
1.调用其它模块的函数嫌麻烦时,可以用-import(Module,[F1,F2]).这样的话就不用写前面的模块名直接调用了。不过不推荐这样做。2.编译的时候可以加一些参数比如-debug_info,-{outdir,Dir},-export_all,-{d,Macro}等等。3.使用module_info()函数可以获得该模块的属性。...原创 2019-04-16 15:53:15 · 179 阅读 · 0 评论 -
learn you some erlang-syntax in functions
right_age(x) when X >=16,X =<104 ->true写函数的时候可以带上Guard表达式,就是when后面那一块,那一块的内容不能是玩家自定义的函数,因为erlang并不相信你写得函数有没有毛病,if语句后面也必须是Guard表达式才可以beach(Temperature) -> case Temperature of {celsius...原创 2019-04-17 16:29:59 · 233 阅读 · 0 评论 -
lysm More On Multiprocessing
主要就是讲了erlang消息传输的一些知识没有接收消息的部分,用于延时等待sleep(T) -> receive after T -> ok end.用于清理消息队列flush() -> receive _ -> flush() after 0 -> ok end.比较有意思的按照优先级处理队列important() -> ...原创 2019-04-26 17:48:34 · 147 阅读 · 0 评论 -
erlang json
Git上面写的Jsx可以将proplists或者maps转换成json二进制字符串jsx:encode(#{a=>1,b=>2}). %%<<"{\"a\":1,\"b\":2}">>jsx:encode([{a,1},{<<“b”>>,2}]). %%<<"{\"a\":1,\"b\":2}">>通过e...原创 2019-04-15 10:36:59 · 1287 阅读 · 0 评论 -
learn you some erlang-startting out(for real)
网上看到有这本书,看了下感觉不错,重新复习下erlang的基础。startting out(for real)章节主要介绍了erlang的基本数据结构,有些特性是最初学习就经常犯错的。1.Numbers首先得话就是除法操作,erlang现在这个版本的话使用/符号返回的是浮点型的数字,如果想要整除或者取余是需要使用div,rem的。然后erlang里面的数字只有整形和浮点型,整形的话在erla...原创 2019-04-15 15:04:50 · 192 阅读 · 0 评论 -
erlang gen_tcp网络连接
gen_tcp有false,active,once,N这些选项,active是不提供流量控制的,之前没读懂,疑惑了好久,后面仔细看了看,也许是这个意思:erlang的话每个进程都有个邮箱,消息就放在邮箱中,在active模式下会无限的从底层接收缓存中提取消息到邮箱中,邮箱满了消息就会丢失。packet参数的意义是说在发送消息的时候会自动生成这么多字节的头部,我试了试这个选项在active、f...原创 2019-03-19 17:10:28 · 1132 阅读 · 0 评论