昨天下了个Erlang速查表,不过是英文的有点不习惯。百度了下居然没有其他的版本。今天脑抽把原本的pdf转为word后翻译,因为转换时格式出问题,所以最后直接搞成两页了。另外添加了些个人查到的一点资料。
原版:http://www.cheat-sheets.org/saved-copy/Erlang.CheatSheet(1.0).pdf
Erlang 速查表 v1.0
Variable变量 %注释 (大写字母开头)
Str = "John Doe". % 字符串保存为整数列表.
% 打印输出值
io:format("Name is: ~s~n", [Str]).
io:fwrite("Name is: ~s~n", [Str]).
~n => 换行
~s => 参数是一个字符串、I/O列表或原子,打印时不带引号
~f => float浮点数
~w=>标准输出.类似 Object.toString().
~p=>类似 ~w 但会在每一行后中断(把参数打印为美观的形式)
List = [1,2,3,4]. % lists列表
NewList = [6, 7, List]
返回[6,7, [1,2,3,4]] %添加到新列表
> [H|T] = AList.
["a","b",{1,2,3}] % 返回Head列表头和Tail列表尾. H和T都是没有绑定的变量.
Tuple = {1.0, 2.0, 3.0}
element(2, Tuple) 返回2.0 % 元组索引
{_, Second, _} = Tuple 保存2.0为变量Second % 模式匹配来检索一个值
列表和元祖能包含任意类型的数据.
> Atuple = {1,2,3}.
{1,2,3}
> AList = ["a", "b", Atuple].
["a","b",{1,2,3}]
> Anewtuple = {atom1, atom2, AList}.
{atom1,atom2,["a","b",{1,2,3}]
Function函数:
匿名函数:
F = fun(X) -> X end. % F(10)打印10
命名函数:
method_name(Arg) ->
Arg.
% 对列表的每个元素都执行操作
> L = [1,2,3,4,5].
[1,2,3,4,5]
> lists:map(fun(X) -> 2*X end, L). % 使用lists模块中的map方法
[2,4,6,8,10]
> [2*X || X <- L]. % 或者使用列表推导式
[2,4,6,8,10]
atom or ‘ATOM’ %原子由小写字母开头,否则加单引号
Macro宏:
-define(macro1, Replacement)
?macro1 %用这种方式使用宏
Erlang Shell:
c(ModuleName) % 编译模块
cd("dirname") % 改变目录
f() % 清空所有绑定
rr("records.hrl") %读取一个record(记录)文件
rf(record_name) %忘记record文件
Record记录:
-record(todo, {status=reminder,who=john,text}).
%创建该记录的实例:
X = #todo{status=urgent}.
%使用模式匹配,从记录中提取值
#todo{status=S} = X.
X#todo.status %%获取单个字段.
% ++是中缀插入操作符
> [1] ++ [2] ++ [3].
[1,2,3]
% X--Y是列表移除操作,它从 X 里移除 Y 中的元素.
使用模式匹配/递归替换迭代.
total([{What,N|T}]) -> cost(What) * N + total(T);
total([]) -> 0.
File attributes模块属性 % -import, -export, -module
-module(modulename). %模块声明。必须是文件里的第一个属性。必须与文件名相同
-export([Func_a/0, Func_b/1]). % 指定向外界导出的函数列表
-import(lists, [map/2]). % 导入模块和方法列表
-compile(Options). %设置编译选项,比如export_all
-vsn(Vsn). %模块版本,设置了此项,可以通过beam_lib:version/1 获取此项信息
%% 可以通过-include和-include_lib来包含文件,两者的区别是include-lib不能通过绝对路径查找文件,而是在你当前Erlang的lib目录进行查找(注意: -record(...)和-include(...) 有着类似的语法,但是不算模块属性):
-include(Filename).
-include_lib(Name).
case Expression of
Pattern1 [when Guard1] -> Expr_seq1;
Pattern2 [when Guard2] -> Expr_seq2
end.
来源:http://weblogs.asp.net/nleghari
翻译的pdf文档:http://download.csdn.net/detail/heybob/9612991