Erlang 基础学习 4 Advanced Sequential Programming

Day 4 Advanced Sequential Programming

• BIF Build-In Functions,是在虚拟机里实现的,用erlang很难实现的功能,例如tuple_to_list,time等
• Binaries 中的整数只能在0-255
• term_to_binary,binary_to_term,list_to_binary
• 位操作
• M = <<X:3, Y:7, Z:6>><3 y:7 z:6=""><br>• X占三个bit,Y7个,Z6个<br><br>&lt;&lt;&gt;&gt;<br>&lt;&lt;E1, E2, ..., En&gt;&gt;<e1 e2 en=""><br><br>Ei = Value |<br>      Value:Size |<br>      Value/TypeSpecifierList |<br>      Value:Size/TypeSpecifierList<br><br>• binary 数据只能表达8的整数倍的bits,因为是用byte来存储的<br>•  16#abc,表示16进制的abc,相当于10#2748.<br>• 16#abc = 2748 . <br>• erlang 支持2 到36进制<br>• 例如 4#213123123 = 161499.<br><br>• {ok,Bin}=file:read_file("/path/to/the/file").  读文件<br><br>BIF apply : 相当于java中的反射调用<br>• apply(Mod, Func, [Arg1, Arg2, ..., ArgN])<br>• 相当于 直接调用 Mod:Func(Arg1, Arg2, ..., ArgN)<br>• 要尽量避免使用<br><br><b>Module Attributes</b><br><br>• predefined attributes:<br>• -module(modname).<br>• -import(Mod, [Name1/Arity1, Name2/Arity2,...]).<br>• -export([Name1/Arity1, Name2/Arity2, ...]).<br>• -compile(Options).  例如:-compile(export_all).<br>• -vsn(Virsion).没有其他含义,一般用来分析或者文档<br>• user defined attributes:<br>-module(attrs).<br>-vsn(1234).<br>-author({joe,armstrong}).<br>-purpose("example of attributes" ).<br>-export([fac/1]).<br>fac(1) -&gt; 1;<br>fac(N) -&gt; N * fac(N-1).<br><br>• 可以用Modname:module_info().来获取所有的attributes<br><br><b>Block Expressions</b><br><br>begin<br>    Expr1,<br>    ...,<br>    ExprN<br>end<br><br>• 用在只允许一个表达式,但是又需要有很多代码的地方<br>• 他的值是最后一个表达式的值<br><br><b>include</b><br><br>• include的文件都是以.hrl结尾的<br>• include(FileName). 使用相对路径或者绝对路径<br>• include_lib(Name).<br><br><b>Macro </b><br>• 定义:<br>-define(Constant, Replacement).<br>-define(Func(Var1, Var2,.., Var), Replacement).<br><br>• 使用?MacroName 引用<br>• 预定义的<br>• ?FILE当前文件<br>• ?MODULE当前module<br>• ?LINE当前行<br>• -undef(Macro).<br>• -ifdef(Macro).<br>• -ifndef(Macro).<br>• -else.<br>• -endif.<br>• <br><br><b>Numbers</b><br>• 整数,整数的大小没有限制(受内存大小限制,废话)<br>• 整数的三种写法:<br>• 1. 一般的,123,1231231,-34234<br>• 2. n进制,最大到36进制,例如 0 -65 2#010001110 -8#377 16#fe34 16#FE34 36#wow<br>• 3. $+字符,例如 $a 表示97,就是a的ascii码,$\n表示10<br>• 浮点数,例如 1.0 3.14159 -2.3e+6 23.56E-27,内部表示都是IEEE 754 64-bit<br>• 浮点数的表达区间是 −10^323 to 10^308<br><br><b>Process Dictionary</b><br><br>• 每个erlang进程都有一个私有的dictionary,可以保存一些属性<br>• @spec put(Key, Value) -&gt; OldValue.<br>• @spec get(Key) -&gt; Value.<br>• @spec get() -&gt; [{Key,Value}].<br>• @spec get_keys(Value) -&gt; [Key].<br>• @spec erase(Key) -&gt; Value.<br>• @spec erase() -&gt; [{Key,Value}].<br>• 一般不推荐使用,因为会破坏Varible not Vary的原则,如果使用,可以存放一些不会变动的内容。<br><br><br><b>其他内容</b><br>• erlang 的源代码都是使用iso-8859-1 编码的,erlang的字符串都是integer数组,因此内部没有编码问题<br>• 注释,使用 %,只有行注释,没有块注释<br>• 没有特别的boolean类型,true和false<br>• epp, Erlang preprocessor,处理macross和include,可以用compile:file(M, [’P’]). 来编译M.erl,然后把preprocess后的内容方到M.P里<br>• function引用,fun mod_name:fun_name/Arity,如果在同一个module,mod_name可以省略<br>• list操作的++ 和 --,注意--是将第一个出现的值去掉<br>• 在 erlang shell里,可以用c(Module,{}).来编译module,可以传一些参数进去<br>• andalso/orelse 和and / or的区别主要在于懒惰,能不执行的时候就不执行,and/or的表达式都是一定会执行的<br>• number &lt; atom &lt; reference &lt; fun &lt; port &lt; pid &lt; tuple &lt; list &lt; binary<br>• =:= =/= 和 == /=的区别,一个是绝对一样,另一个是差不多相等<br>• 使用下划线开头的变量,如果未被使用,编译器不会警告<br>• 可以在作pattern match的时候将match的内容命名,供后面使用,可以提高效率(避免重新生成内容),例如:<br><br>func1([{tag, {one, A}=Z1, B}=Z2|T]) -&gt;<br>   ..,.<br>   ... f(..., Z2, ...),<br>   ... g(..., Z1, ...),<br>   ...<br><br></e1></3>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值