长期更新(大概),适合已经编写过几次Erlang代码却搞不懂开头一大堆是什么意思的新手。
属性
在每次编写Erlang代码开头都会有类似-module().的语句,他们是模块属性。写几个常用的预定义模块属性。
-module(modname). %这是模块声明,其中modname必须是一个原子,此属性必须是文件里的第一个属性,modname也必须是文件名,modname.erl。
-vsn(version) %指定版本号,Version可以是任何字面数据类型,没什么用处,一般用于分析和说明。
-import(Mod,[Name1/Arity1]). %import声明列举了哪些函数需要导入到模块中。一旦从别的模块里导入了某个函数,调用它的时候就无需指定模块名了.
-export([Name1/Arity1, Name2/Arity2, ...]). %导出当前函数,函数只有被导出后才能在模块之外调用。
-compile(Options). %添加Options到编译器选项列表中
注意:-compile(export_all).这个编译器选项经常会在调试程序时用到。它会导出模块里的所有函数,无需再显式使用-export标识了。
举个例子,意思是输入年数和月份能自动判断这个月有多少天,calendar:is_leap_year()是内置函数,具体可以参考Erlang中文手册。
-module(tut1).
%%下面两行是等价的
-compile(export_all).
-export([month_length/2]).
month_length(Years,Month) ->
Leep = calendar:is_leap_year(Years),
case Month of
sep -> 30;
apr -> 30;
jun -> 30;
nov -> 30;
feb when Leep -> 29;
feb -> 28;
jan -> 31;
mar -> 31;
may -> 31;
jul -> 31;
aug -> 31;
oct -> 31;
dec -> 31
end.