Erlang 记录摘要
Summary: Author: 张亚飞 | Read Time: 2 minute read | Published: 2015-09-12
Filed under
—
Categories:
Erlang
—
Tags:
Erlang,
Erlang 记录摘要
Erlang Shell
Erlang Shell 命令是 erl .命令以 . 和回车结束. 可以用 ctrl + c 然后选 a 退出 或 执行 halt(). 或 q(). 退出.建议使用 q(). 命令 ,q() 命令会按正确的顺序的关闭系统,halt().命令会强制性的关闭系统,可能会损坏数据库. f() 会让shell释放它所绑定过的所有变量.执行过这个命令后,所有的变量都变成自由变量.
Erlang R15B (erts-5.9) [smp:2:2] [async-threads:0]
Eshell V5.9 (abort with ^G)
1> 1+4.
5
2>
编译运行 Erlang 代码 文件 tut.erl 需要保存到 erl 程序目录.
-module(tut1).
-export([fac/1]).
fac(1) ->
1;
fac(N) ->
N * fac(N - 1).
在 erlang shell 里执行下面的代码编译程序.
3> c(tut1).
{ok,tut1}
然后执行下面的代码执行
4> tut1:fac(4).
24
ERLANG 文件加载器搜索路径
code:get_path() 获得加载器搜索路径列表 code:add_patha(dir) 将新的路径增加到路径列表开头. code:add_pathz(dir) 将新的路径增加到路径列表结尾. code:all_loaded() 获得已加载的模块的列表.
当前目录的问题
3> pwd().
/home/a/s/gamexg/myerl
ok
4> cd("/home/a/s/gamexg/myerl")
erl -pa Dir1 -pa Dir2 -pz Dirz1 -pz Dirz2
上面的命令可以在启动erl时配置文件加载器路径. pa 增加到列表开头,pz 增加到列表结尾.
数据类型
内置函数参考(类型转换): http://www.erlang.org/doc/man/erlang.html#integer_to_list-2
变量
所有的变量以大写字母开头,变量只能执行一次赋值操作,既变量不变.
原子
原子是一串一小写字母开头,后跟数字,下划线(_),@的字符.使用单引号引起来的字符也是原子.erlang 内原子一经创建就不会回收,而默认原子限制为 1048576 个,超过的话erl 就会挂掉.所以创建原子要注意. 原子相关的函数有 atom_to_binary/2 binary_to_atom/1 binary_to_existing_atom/1 atom_to_list/1, list_to_atom/1, list_to_existing_atom/1 等函数.
http://www.erlang.org/doc/man/erlang.html#atom_to_binary-2
元组
将若干个以逗号分割的值用一对花括号括起来就形成了一个元组.元组类似于c语言中的结构.建议元组的第一个元素用一个原子来标明这个元组所代表的含义(C语言中的结构名).
Eshell V5.9 (abort with ^G)
1> P = {point,10,45}.
{point,10,45}
2> {point,X,_} = P.
{point,10,45}
3> X.
10
4>
记录
-record(Name, {
key1 = Default1,
key2 = Default2,
key3
}
).
记录名和字段名必须是原子.记录的定义可以包含在源代码里面或.hrl文件里.但是不能用record命令直接在shell里定义,可以用rr命令载入hrl文件.使用rf命令释放记录定义.
1> rr("aaa.hrl").
* [Name]
创建并操纵记录
2>X=#Name{}.
#Name{key1 = Default1,key2 = Default2,key3=undefined}
3>X1=#Name{key1=123,key3=789}.
#Name{key1 = 123,key2 = Default2,key3=789}
4>X2=X1#Name{key2=456}.
#Name{key1 = 123,key2 = 456,key3=789}
5>#Name{key1=AAA}=X2.
#Name{key1 = 123,key2 = 456,key3=789}
6>AAA.
456
7>X2#Name.key1.
123
8>rf(Name).
ok
3>X2.
{name,123,456,789}
记录就是元组,系统内部只有元组,记录只是语法层的快捷方式而已.
列表
列表用来储存数目可变的东西,将若干以逗号分割的值用一对方括号括起来,就形成了一个列表.
1> L = [1,2,3,4,5,6,7,8,9].
* [1,2,3,4,5,6,7,8,9]
2> [X|Y]=L.
* [1,2,3,4,5,6,7,8,9]
3> X.
1
4> Y.
* [2,3,4,5,6,7,8,9]
5>
参考:http://svn.liancheng.info/cpie-cn/trunk/.build/html/part-i/chapter-3.html
字符串
Erlang 里面的字符串实际上是整数列表.用双引号将一串字符括起来就是一个字符串.shell 打印一串列表值时,只有列表中所有的整数都是可打印字符时才会当做字符串来打印.可以用 $符号来表示字符的整数值,例如,$a 实际上是一个整数,表示字符a.
语法 函数 函数1(参数1, 参数2) when 断言1, 断言2 -> 函数内容1, 函数内容2; 函数1(参数1) when 断言1 - > 函数1内容.
相同函数名不同参数的函数需要写在一起之间用分号分开.不同函数名的函数直接用句号(.)结束.函数内部使用逗号(,)来分割语句.
If 语句
if 条件1 -> 动作1; 条件2 -> 动作 2; 条件 3 -> 动作 3 end
注意:在结尾没有分号(;).条件部分可以存放多个条件,以逗号(,)表示 AND ,以分号(;)表示 OR.
- Case 语句
-module(tut10).
-export([convert_length/1]).
convert_length(Length) ->
case Length of
{centimeter, X} ->
{inch, X / 2.54};
{inch, Y} ->
{centimeter, Y * 2.54}
end.
71> c(tut10).
{ok,tut10}
72> tut10:convert_length({inch, 6}).
- fun 匿名函数
Eshell V5.5.5 (abort with ^G) 1> Z=fun({2,X})->2*X ; 1> ({4,X})->4*X 1> end.
Fun<erl_eval.6.49591080> 2> Z({2,2}). 4 3> Z({4,2}). 8 4>
其他记录
用命令init:get_arguments().可以获得编译器的环境配置.
> init:get_arguments().
* [{root,["/usr/local/lib/erlang"]},
{progname,["erl"]},
{home,["/data/home/coam"]}]
Comments